CPU
Lieutenant
- Registriert
- Jan. 2006
- Beiträge
- 704
Hallo Leute,
ich habe im Netz diesen tollen Code entdeckt, der einen 3D Würfel "zeichnen" kann.
Allerdings benötige ich ein wenig Hilfe beim Verständnis des Kernquelltexts. Ich frage mich, was "azimuth" bzw. "theta" ("azimuth" in RAD) und "elevation" bzw. "phi" bedeuten und was bei der orthographischen/perspektivischen Projektion genau passiert. Ich habe bereits bei Wikipedia geschaut aber keine passenden "Formeln" dort gefunden. Wird das denn nirgendwo erklärt?
Viele Grüße,
CPU
ich habe im Netz diesen tollen Code entdeckt, der einen 3D Würfel "zeichnen" kann.
Allerdings benötige ich ein wenig Hilfe beim Verständnis des Kernquelltexts. Ich frage mich, was "azimuth" bzw. "theta" ("azimuth" in RAD) und "elevation" bzw. "phi" bedeuten und was bei der orthographischen/perspektivischen Projektion genau passiert. Ich habe bereits bei Wikipedia geschaut aber keine passenden "Formeln" dort gefunden. Wird das denn nirgendwo erklärt?
Code:
// compute coefficients for the projection
double theta = Math.PI * azimuth / 180.0;
double phi = Math.PI * elevation / 180.0;
float cosT = (float)Math.cos( theta ), sinT = (float)Math.sin( theta );
float cosP = (float)Math.cos( phi ), sinP = (float)Math.sin( phi );
float cosTcosP = cosT*cosP, cosTsinP = cosT*sinP, sinTcosP = sinT*cosP, sinTsinP = sinT*sinP;
...
for ( j = 0; j < vertices.length; ++j ) {
int x0 = vertices[j].x;
int y0 = vertices[j].y;
int z0 = vertices[j].z;
// compute an orthographic projection
float x1 = cosT*x0 + sinT*z0;
float y1 = -sinTsinP*x0 + cosP*y0 + cosTsinP*z0;
// now adjust things to get a perspective projection
float z1 = cosTcosP*z0 - sinTcosP*x0 - sinP*y0;
x1 = x1*near/(z1+near+nearToObj);
y1 = y1*near/(z1+near+nearToObj);
Viele Grüße,
CPU