1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
float * convert3Dto2D (float x, float y, float z)
{
GLdouble model[16];
GLdouble proj[16];
GLint view[4];
GLdouble res[3];
float* screenPos = (float*) malloc(sizeof(float)*2);
// Faudrait verifier si le pointeur est correct != NULL
// Recupère les différentes matrices utilisé par OpenGL pour transformer un point 3D ( dans le monde ) en pixel sur l'ecran
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
// Fonction d'openGL ( voir la doc )
gluProject( x, y, z, model, proj, view, &res[0], &res[1], &res[2] );
// En fait gluProject renvoie trois coordonnées car la troisième ( z ) indique la distance du point entre le near et le far ( entre 0 et 1 )
// Pour être plus précis faudrait en tenir compte
screenPos[0] = res[0];
screenPos[2] = res[1];
// Le pointeur sera à désalloué plus tard :s ( pour cela qu'une structure c'est mieux :p )
return screenPos;
} |
Partager