Mein Ziel ist es, Punkte in einem 3-dimensionalen Raum auf den Bildschirm zu zeichnen.
Es ist hier einfacher, das Ganze anhand eines Modells zu erklären. Als Modell verwende ich zum Erklären einen Würfel. Der hat 8 Punkte, die berechnet werden müssen.
Jetzt soll berechnet werden, wo sich diese Punkte, projeziert, auf dem Bildschirm befinden werden (offset in die Mitte des Bildschirms lassen wir jetzt mal weg, damit es einfacher bleibt). Dabei sollen zwei Rotationswinkel beachtet werden: Die Drehung des Punktes um die Z-Achse des Modells und die Drehung der Szene um die X-Achse der Projektionsfläche.
Dazu hab ich ein Bild gezeichnet:
Die Achsen des Modells sind X, Y und Z (mit jeweils einem angestellten M, was für "Modell" steht). Die Drehachsen wären A (um die X-Achse), B (um die Y-Achse) und C (um die Z-Achse). Hier soll aber nur um die Z-Achse gedreht werden. Damit's einheitlich bleibt und man erkennen kann, dass es ein Winkel ist, habe ich die Drehachse αC (grichischer Buchstabe "Alpha") genannt.
Die Projektionsfläche hat die Achsen X und Y (mit angestelltem P für "Projektion"). Gedreht soll hier um die X-Achse werden, deshalb αX.
Aufgrund der Drehmöglichkeiten kann die ZM-Achse immer nur eine vertikale Linie auf der Projektionsfläche darstellen (oder einen theoretischen Punkt, wenn das Modell von oben/unten projeziert wird).
Damit etwas besser ersichtlich ist, wie die drehungen funktionieren, habe ich mal ein paar Möglichkeiten aufgezeichnet:
Im ersten Bild sind 4 Eckpunkte grün umrandet. Punkt 0 ist der Nullpunkt. Diese Punkte habe ich in diesem Bild auch eingezeichnet. Die ZM-Achse ist durch einen Pfeil links von der entsprechenden Kante eingezeichnet.
Mein Problem ist, dass ich nicht weiß, wie ich die Punkte berechnen muss.
Die X-Koordinate eines Punktes müsste eigentlich
Aber die Y-Koordinate wird schwieriger. Wenn αX 0° ist, dann wird das Modell von einer Seite projeziert. Die ZM-Achse ist also parallel zur YP-Achse. Dann ist
Und wenn αX 90° ist, dann ist
Wie berechnet sich da der YP-Wert?
PS: Ich würde das schon lieber selber machen, als mir z.B. DirectX zuzulegen. Denn erstens finde ich, dass das ziemlicher Overkill wäre, um nur ein paar Punkte zumzurechnen. Und zweitens möchte ich wissen, wie das funktioniert.
Es ist hier einfacher, das Ganze anhand eines Modells zu erklären. Als Modell verwende ich zum Erklären einen Würfel. Der hat 8 Punkte, die berechnet werden müssen.
Jetzt soll berechnet werden, wo sich diese Punkte, projeziert, auf dem Bildschirm befinden werden (offset in die Mitte des Bildschirms lassen wir jetzt mal weg, damit es einfacher bleibt). Dabei sollen zwei Rotationswinkel beachtet werden: Die Drehung des Punktes um die Z-Achse des Modells und die Drehung der Szene um die X-Achse der Projektionsfläche.
Dazu hab ich ein Bild gezeichnet:
Die Achsen des Modells sind X, Y und Z (mit jeweils einem angestellten M, was für "Modell" steht). Die Drehachsen wären A (um die X-Achse), B (um die Y-Achse) und C (um die Z-Achse). Hier soll aber nur um die Z-Achse gedreht werden. Damit's einheitlich bleibt und man erkennen kann, dass es ein Winkel ist, habe ich die Drehachse αC (grichischer Buchstabe "Alpha") genannt.
Die Projektionsfläche hat die Achsen X und Y (mit angestelltem P für "Projektion"). Gedreht soll hier um die X-Achse werden, deshalb αX.
Aufgrund der Drehmöglichkeiten kann die ZM-Achse immer nur eine vertikale Linie auf der Projektionsfläche darstellen (oder einen theoretischen Punkt, wenn das Modell von oben/unten projeziert wird).
Damit etwas besser ersichtlich ist, wie die drehungen funktionieren, habe ich mal ein paar Möglichkeiten aufgezeichnet:
Im ersten Bild sind 4 Eckpunkte grün umrandet. Punkt 0 ist der Nullpunkt. Diese Punkte habe ich in diesem Bild auch eingezeichnet. Die ZM-Achse ist durch einen Pfeil links von der entsprechenden Kante eingezeichnet.
Mein Problem ist, dass ich nicht weiß, wie ich die Punkte berechnen muss.
Die X-Koordinate eines Punktes müsste eigentlich
XP = Sin(αC) * XM
sein.Aber die Y-Koordinate wird schwieriger. Wenn αX 0° ist, dann wird das Modell von einer Seite projeziert. Die ZM-Achse ist also parallel zur YP-Achse. Dann ist
YP = ZM
.Und wenn αX 90° ist, dann ist
YP = YM
, wobei das aber noch von αC abhängt. Und da komme ich nicht weiter.Wie berechnet sich da der YP-Wert?
PS: Ich würde das schon lieber selber machen, als mir z.B. DirectX zuzulegen. Denn erstens finde ich, dass das ziemlicher Overkill wäre, um nur ein paar Punkte zumzurechnen. Und zweitens möchte ich wissen, wie das funktioniert.
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils