Я рисую здания в своем игровом мире, закрашиваю их следующим кодом:
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);
Хорошо работает.
Но когда я начинаю летать в мире, освещение реагирует на это так, как если бы мир был объектом, который вращается. Таким образом, свет меняется при изменении угла наклона камеры.
Как мне вернуть это вращение? таким образом, освещение будет думать, что я на самом деле не вращаю мир, и тогда я могу сделать свои здания статичными, затененными, которые будут меняться в зависимости от того, где солнце на небе.
Редактировать: вот код рендеринга:
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
}