2009-12-16 5 views
3

Je dessine des bâtiments dans mon monde du jeu, je ombrager avec le code suivant:problème d'éclairage OpenGL lors de la rotation de la caméra

GLfloat light_ambient[] = {0.0f, 0.0f, 0.0f, 1.0f}; 
GLfloat light_position[] = {135.66f, 129.83f, 4.7f, 1.0f}; 

glShadeModel(GL_SMOOTH); 

glEnable(GL_LIGHT0); 
glEnable(GL_COLOR_MATERIAL); 

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 
glLightfv(GL_LIGHT0, GL_POSITION, light_position); 

glColorMaterial(GL_FRONT, GL_AMBIENT); 

Il fonctionne très bien.

Mais quand je commence à voler dans le monde, l'éclairage réagit comme si le monde était un objet en rotation. Ainsi, les lumières changent lorsque l'angle de mon appareil photo change.

Comment inverser cette rotation? donc l'éclairage penserait que je ne fais pas réellement tourner le monde, et alors je pourrais faire que mes bâtiments aient l'ombre statique qui changerait selon où le soleil est sur le ciel.

Edit: voici le code de rendu:

int DrawGLScene() 
{ 

    // stuff 

    glLoadIdentity(); 

    glRotatef(XROT, 1.0f, 0.0f, 0.0f); 
    glRotatef(YROT, 0.0f, 1.0f, 0.0f); 
    glRotatef(ZROT, 0.0f, 0.0f, 1.0f); 

    glTranslatef(-XPOS, -YPOS, -ZPOS); 

    // draw world 
} 
+0

le problème est probablement dans votre code mouvement/rotation, postez-le aussi. – DShook

+0

Ajouté le code de rendu –

Répondre

4

http://www.opengl.org/resources/faq/technical/lights.htm

Voir # 18,050

En bref, vous devez vous assurer que vous définissez votre position de lumière dans la référence de droite encadrer et appliquer les transformations appropriées chaque image pour le garder où vous le voulez.

+0

ah, c'était, merci! –

1

Je crois que votre problème provient du fait que les lumières OpenGL sont spécifiées dans les coordonnées mondiales, mais stockées en interne dans les coordonnées de la caméra. Cela signifie qu'une fois que vous placez une lumière, chaque fois que vous bougez votre appareil photo, votre lumière se déplace avec elle.

Pour résoudre ce problème, il vous suffit de repositionner vos lumières lorsque vous déplacez votre appareil photo.