2014-05-09 4 views
0

Ceci est une image que je dessine avec mon programme:OpenGL. fonction gluLookAt ne fonctionne pas

[IMG] http://i62.tinypic.com/j163j8.png [/ IMG]

Il est censé être 3D. Lorsque je tente de le vérifier avec gluLookAt:

GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); 
GL.glLoadIdentity(); 
GL.glMatrixMode(GL.GL_MODELVIEW); 

glu.gluLookAt(
5.0, 2.0, 2.0, 
0.0, 0.0, 0.0, 
0.0, 0.0, 0.0); 

figura(drawable); //Drawing figure 
GL.glFlush(); 

Il montre seulement un écran blanc, ou une figure foiré pour une seconde, il se déclenche. Si je comprends bien, les trois premiers coords montrent le point de vue, le deuxième 3 montre la destination de visualisation et le troisième 3 montre l'axe de rotation. Mais cette fonction ne fait que tout chambouler.

Merci pour les réponses.

+0

Troisième 3 sont le vecteur «up», essayez 'glu.gluLookAt (5.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);' –

+0

@ AnthonyVallée-Dubois Ce serait un vecteur en place valide si l'œil était sur le même plan XZ que la cible, c.-à-d. {5, 0, 2} au lieu de {5, 2, 2}. – schmop

+0

@schmop Peut-être que j'ai tort car cela fait un moment mais je crois comprendre que le vecteur up est recalculé par 'gluLookAt()' pour être perpendiculaire au vecteur direction tel que 'side = cross (dir, up); haut = croix (côté, dir); Voir: http: //www.opengl.org/wiki/GluLookAt_code –

Répondre

1

Les trois derniers paramètres ne sont pas exactement la rotation, mais le vecteur «haut». Si vous ne voulez pas d'une vue déformée, le vecteur haut doit être perpendiculaire à votre vecteur de direction, qui est ici {-5, -2, -2}. Parmi tous les vecteurs perpendiculaires, celui que vous choisirez définira la rotation comme vous l'appelez. Dans votre exemple, le vecteur vertical le plus ascendant (celui que vous utiliseriez dans un jeu à la première personne par exemple) serait {-.323, .937, -.129} après la normalisation. Je l'ai calculé d'abord en trouvant le vecteur "gauche" (produit croisé entre le haut absolu {0, 1, 0} et la direction), puis comme le produit croisé entre la direction et "gauche".

+0

'gluLookAt()' ortho-normalise le vecteur ascendant par rapport au vecteur œil. Il n'y a pas besoin de le faire manuellement. Voir http://www.manpagez.com/man/3/gluLookAt/. –

+0

@RetoKoradi Okay. Ce n'était pas si clair à partir des pages de référence OpenGL. – schmop