Berechnung des Betrachtungsfrustums in einem 3D-Raum

8

Ich habe Diagramm für Diagramm gezeichnet, wie man die Grenzpunkte des Betrachtens von Frustrum in einem dreidimensionalen Raum berechnet . Zu Beginn habe ich zwei Datensätze, die jeweils drei Werte enthalten: die xyz-Koordinaten der Kamera und die Drehung um die x-, y- und z-Achse. Bei einer bestimmten Ansichtsdistanz sollte es möglich sein, die Begrenzungspunkte jeder der 6 Ebenen zu berechnen. Ich habe diese Gleichungen verwendet, um die Breite und Höhe der fernen Ebene zu berechnen:

%Vor%

hfar ist die Höhe der fernen Ebene, wfar die Breite und das Verhältnis das Verhältnis der Breite der Ansichtsöffnung geteilt durch die Höhe ist. Ich habe das folgende Diagramm verwendet, um es herauszufinden:

Ich muss die Punkte finden, die mit (?,?,?) kommentiert sind. Ich habe versucht, diese Werte jetzt für ein paar Tage zu berechnen, aber ohne Erfolg. Jede Hilfe wäre willkommen.

Außerdem finden Sie einige nette Quellen mit Informationen zum Thema hier und hier .

BEARBEITEN: Ein anderes Bild, das ich aufgepeitscht habe, zeigt eine einzelne Scheibe durch die y-Achse, die auf die x-Achse schaut. Es zeigt die gleichen Informationen wie das Bild oben, aber es zeigt auch mein Problem: Ich kann nicht die richtigen Z-Achsen-Werte für jeden der Grenzpunkte der fernen Ebene berechnen.

Denken Sie daran, dass der gleiche Schnitt über die x-Achse gemacht werden könnte, um denselben Prozess zu zeigen, aber mit dem Winkel, in dem der Spieler nach oben oder unten schaut.

    
CoderTheTyler 02.12.2012, 02:44
quelle

2 Antworten

4

Ich denke, das allgemeine Problem, das Sie lösen wollen, ist, wie man ein Objekt in 3d dreht. Von dem, was ich verstehe, wissen Sie, wie Sie die Größe der Vektoren Ihrer Kamera erhalten, aber nicht ihre Ausrichtung. Sie haben Winkeldrehungen um die x-, y- und z-Achse definiert, die Sie auf die Vektoren [up], [side] und [view / lookAt] der Kamera anwenden möchten.

Das obige Bild zeigt, was ich mit up-, side- und lookAt-Vektoren meine. Sie sind relevant für Ihren Frustum, wie im folgenden Bild gezeigt.

Hier ist ein grober Code in C ++, der einen Punkt um eine Achse und einen Winkel dreht:

%Vor%

Sobald Sie die gedrehten Seiten-, Ansichts- und Seitenvektoren haben, können Sie die Ecken Ihres fernen Flugzeugs finden.

    
Prismatic 02.12.2012, 04:07
quelle
4

Berechnen Sie die Mittelpunkte der nahen und fernen Ebenen:

%Vor%

Berechnen Sie die Breiten und Höhen der nahen und fernen Ebenen:

%Vor%

Berechnen Sie die Eckpunkte von den nahen und fernen Ebenen:

%Vor%

Berechnen Sie jede Ebene von drei beliebigen Ecken der Ebene, die im Uhrzeigersinn oder gegen den Uhrzeigersinn gerichtet sind, um nach innen zu zeigen (abhängig vom Koordinatensystem).

%Vor%     
orfdorf 10.01.2015 02:32
quelle