我在游戏世界中绘制的建筑物,我遮阳它们与下面的代码:

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
}
有帮助吗?

解决方案

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

请参阅#18.050

总之,你需要确保你定义你的光的位置在右参考框架和应用适当的变换每一帧以保持它,你想要它。

其他提示

我相信从OpenGL的灯在世界坐标系中指定,但在摄像机坐标内部存储的事实,你的问题就出现了。这意味着,一旦你把一盏灯,当你移动你的相机,你的光也跟着移动。

要解决这个问题,只需重新定位你的灯,每当你移动你的相机。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top