Pregunta

Dibujo edificios en mi mundo del juego, i sombra con el siguiente código:

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);

Se trabaja muy bien.

Pero cuando comienzan a volar en el mundo, la iluminación que reacciona a como si el mundo era un objeto que está siendo girado. Así que las luces cambia cuando cambia el ángulo de mi cámara.

¿Cómo puedo volver que la rotación? por lo que la iluminación podría pensar que no estoy realmente girando el mundo, y entonces pude hacer mis edificios tienen sombreado estática que cambiaría dependiendo de donde el sol está en el cielo.

Edit: aquí está el código de representación:

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
}
¿Fue útil?

Solución

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

Vea # 18,050

En resumen, es necesario asegurarse de que está definiendo su posición de la luz en el marco de referencia adecuado y aplicar la apropiada transforma cada marco para mantenerla donde lo desee.

Otros consejos

Creo que su problema surge del hecho de que las luces de OpenGL se especifican las coordenadas del mundo, sino que se almacena internamente en la cámara Coordenadas. Esto significa que una vez que se coloca una luz, cuando se mueve la cámara, su luz se moverá con él.

Para solucionar este problema, basta con cambiar la posición de las luces cada vez que se mueva la cámara.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top