2012-04-12 3 views
2

Ich bin Quaternion Methoden bekannt, dies zu tun. Aber letztendlich erfordern diese Methoden, dass wir alle Objekte in den Rotationsraum der Kamera transformieren.Java/C++ - 3D-Linie aus Kamera Gieren (Kopf) und Tonhöhe (keine Rolle)

Allerdings, wenn man sich die Mathematik anschaut, bin ich mir sicher, dass es einen einfachen Weg geben muss, um die XY-, YZ- und XZ-Gleichungen für eine Linie zu erhalten, die nur auf dem YAW (Kurs) und PITCH einer Kamera basiert.

Zum Beispiel, angesichts der Normalen der Ansicht Kaugummi wie (sqrt (2), sqrt (2), 0) können Sie leicht die Linie (x + y = 0) für die XY-Ebene. Aber sobald sich das Z (in diesem Fall wird Z für die Tiefe verwendet, nicht die Y-Koordinatenverschränkung von GL) ändert, werden die Berechnungen komplexer.

Zusätzlich, in der Reihenfolge der Anwendung von Rotationen: Gieren, Pitch, Roll; Roll wirkt sich nicht auf die Normalen des View-Kaugummis aus.

Also meine Frage ist sehr einfach. Wie gehe ich von einer 3-Koordinaten-Ansicht normal (das ist normalisiert, dh die Vektorlänge ist 1) oder ein Gieren (im Bogenmaß), Pitch (im Bogenmaß) Paar zu einem Satz von drei Liniengleichungen, die die Richtung der "Auge" durch den Raum?

HINWEIS:

Quaternionen ich Erfolg gehabt habe mit in dieser, aber die Mathematik ist zu komplex für jede Einheit in einer Simulation für visuelle Kontrollen zu tun, zusammen mit gegen alle sichtbaren Objekte zu überprüfen, die auch bei verschiedenen überprüft, um die Anzahl der sichtbaren Objekte zu reduzieren.

Antwort

1
nx = (float)(-Math.cos(yawpos)*Math.cos(pitchpos)); 
ny = (float)(Math.sin(yawpos)*Math.cos(pitchpos)); 
nz = (float)(-Math.sin(pitchpos))); 

Das bekommt die Normalen der Kamera. Dies setzt voraus, dass Gier und Tonhöhe im Bogenmaß sind.

Wenn Sie die Position der Kamera (px, py, pz) können Sie die Parametergleichung thusly erhalten können:

x = px + nx*t 
y = py + ny*t 
z = pz + nz*t 

Sie können auch die 2D-Projektionen dieser Linie konstruieren:

0 = ny(x-px) + nx(y-py) 
0 = nz(y-px) + ny(z-pz) 
0 = nx(z-pz) + nz(x-px) 

Ich denke, das ist richtig. Wenn jemand ein falsches Plus/Minus notiert, lassen Sie es mich wissen.

2

Verwenden Sie eines der popular methods da draußen für den Aufbau einer Matrix von Gieren und Tonhöhe, um die Kameradrehung darzustellen. Die Matrixelemente enthalten nun alle möglichen nützlichen Informationen. Zum Beispiel (wenn Sie die übliche Darstellung verwenden) zeigen die ersten drei Elemente der dritten Spalte entlang des Ansichtsvektors (entweder in oder aus der Kamera, abhängig von der Konvention, die Sie verwenden). Die ersten drei Elemente der zweiten Spalte zeigen relativ zur Kamera nach oben. Und so weiter.

Es ist jedoch schwierig, Ihre Frage mit Zuversicht zu beantworten, da viele Dinge, die Sie sagen, für mich keinen Sinn ergeben. Zum Beispiel habe ich keine Ahnung, was "ein Satz von drei Liniengleichungen, die die Richtung des 'Auges' durch den Raum abbilden" bedeutet. Die Blickrichtung ist einfach durch einen Vektor gegeben, wie ich oben beschrieben habe.

+0

Raum ist drei Dimensionen. Um die Richtung des Auges durch den Raum richtig abzubilden, benötigen Sie drei zweidimensionale Liniengleichungen: x, y; x, z; y, z. Die Umwandlung von Gier und Tonhöhe in eine Linie sollte keine Matrixmultiplikationen erfordern. –

+0

In Computergrafiken wird eine Linie häufig durch (1) einen Punkt auf der Linie und eine Richtung oder (2) zwei Punkte auf der Linie dargestellt. Ich arbeite seit 20 Jahren in Grafik und habe noch nie zwei 2D-Gleichungen benutzt. Die Beschreibung einer Ausrichtung mit Nick und Gier beschreibt sie als die Zusammensetzung eines Rotationspaares. Matrizen eignen sich zum Erstellen von Rotationen.Sie müssen jedoch keine Matrizen verwenden. Verwenden Sie einfach die Formeln für die einzelnen Elemente wie in der Verknüpfung, die ich gab. Ich habe den Kamera-Richtungsvektor 100 mal so erfolgreich gefunden. – sigfpe

+0

Gut genug, aber einen Link zur Verfügung zu stellen, mit dem Sie die Frage vielleicht selbst beantworten können, ist nicht dasselbe wie das Beantworten. –

Verwandte Themen