Question

Je dessine des bâtiments dans mon monde du jeu, je ombrager avec le code suivant:

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 à cela comme si le monde était un objet qui est en rotation. Donc, les lumières changent lorsque mes changements d'angle de la caméra.

Comment puis-je reviens que la rotation? si l'éclairage pourrait penser que je ne suis pas réellement le monde en rotation, puis je pourrais faire mes bâtiments ont ombrage statique qui changeraient en fonction de l'endroit où le soleil est dans 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
}
Était-ce utile?

La solution

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 le cadre de référence droit et l'application de la appropriée Transforme chaque cadre pour le garder où vous le voulez.

Autres conseils

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

Pour corriger cela, repositionner simplement vos lumières chaque fois que vous déplacez votre appareil photo.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top