myJava.rwp

Projektion

Die Projektion

Unter einer Projektion versteht man die Umwandlung von dreidimensionalen Welt- koordinaten (wx, wy, wz) in zweidimensionale Bildschirmkoordinaten(sx, sy). Diese Umwandlung erfolgt durch den Einsatz folgender Gleichungen:

sx = wx / wz * projection_const

sy = wy / wz * (-projection_const)

Die Projectionskonstante projection_const hat üblicherweise den Wert 100 und stellt die räumliche Entfernung zwischen dem Betrachter, der sich im Ursprung des 3D-Koordinatensystems befindet und dem Computerbildschirm. Bei der y-Gleichung ist projection_const negativ, da die Bildschirmkoordinaten entgegengesetzt dem kartesischen Koordinatensystem von oben nach unten zunehmend verlaufen.

Da sich der Ursprung des zweidimensionalen Koordinatensystems in der oberen linken Ecke des Bildschirms befindet, eine dreidimensionale Umgebung aber davon ausgeht, dass sich der Ursprung in der Mitte des Bildschirms befindet, muss diese Verlagerung noch in der Formel berücksichtigt werden. Desweiteren erfolgt die Übergabe der Koordinaten als int:

sx = (int)(wx / wz * projection_const + getWidth() / 2);

sy = (int)(wy / wz * (-projection_const) + getHeight / 2);

Die Vorteile des Einsatzes von 3D-Koordinaten ist beeindruckend. Wird z.B. ein Polygon über die Koordinaten wx und wy erstellt, bestimmt der Wert wz (gleicher Wert für alle Koordinaten) die Größe der Darstellung. Dabei gilt, dass je größer der Wert wz ist, desto kleiner wird die Abbildung des Polygons auf dem Bildschirm, da ja die visuelle Entfernung zum Betrachter zunimmt. Weitere Effekte kann man erzielen, wenn man andere Werte für die Projektionskonstante projection_const wählt. Je kleiner man die Projektionskonstante wählt, um so stärker werden die Seiten, welche sich in der Nähe des Betrachters  befinden, vergrößert und die von ihnen gebildeten Winkel verkleinert.

 

Formeln fuer die Berechnung von 3D-Koordinaten

Skalierung:

x’ = x * sf

y’ = y * sf

z’ = z * sf

Translation:

x’ = x + xt

y’ = y + yt

z’ = z + zt

Rotation um die x-Achse:

x’ = x

y’ = y * cos(alpha) - z * sin(alpha)

z’ = y * sin(alpha) + z * cos(alpha)

Rotation um die y-Achse:

x’ = z * sin(alpha) + x * cos(alpha)

y’ = y

z’ = z * cos(alpha) - x * sin(alpha)

Rotation um die z-Achse:

x’ = x * cos(alpha) - y * sin(alpha)

y’ = x * sin(alpha) + y * cos(alpha)

z’ = z