我在游戏世界中绘制建筑物,并使用以下代码对其进行着色:
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);
Run Code Online (Sandbox Code Playgroud)
效果很好。
但是,当我开始在世界上飞行时,灯光会对此做出反应,就好像世界是一个正在旋转的物体一样。因此,当我的相机角度改变时,灯光也会改变。
我如何还原该旋转?因此照明会认为我实际上并没有旋转世界,然后我可以使建筑物具有静态阴影,该阴影会根据太阳在天空上的位置而变化。
编辑:这是渲染代码:
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
}
Run Code Online (Sandbox Code Playgroud)
http://www.opengl.org/resources/faq/technical/lights.htm
参见#18.050
简而言之,您需要确保在正确的参考帧中定义光源位置,并在每个帧中应用适当的变换以使其保持在所需位置。
| 归档时间: |
|
| 查看次数: |
7600 次 |
| 最近记录: |