我在我的游戏世界中绘制建筑物,我使用以下代码为它们着色:
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
}