【发布时间】:2012-05-19 13:32:18
【问题描述】:
我正在使用 OpenGL 制作一个小型模拟游戏,在该游戏中,场地中有一个球,并且相机被锁定以从顶部的某个角度观看球(请参见下面的屏幕截图)。一切正常,但是,当相机经过某个点时,墙上的照明会失效。就好像在新创建的场景中“没有灯光”一样。
这是正确的:
这是当相机从某个点经过时,左侧墙上的照明被重置:
它不会逐渐发生。它在相机移动时突然发生。这是我绘制墙壁的代码:
glBindTexture(GL_TEXTURE_2D, brickTexture);
glCallList(wallObjectID);
列表在前面定义的地方:
glNewList(wallObjectID, GL_COMPILE);
glBegin(GL_QUADS);
glNormal3f(0, 90, 0);
glTexCoord2f(0, 0);
glVertex3f(0, 0, 0);
glTexCoord2f(0, 1);
glVertex3f(0, level->length, 0);
glTexCoord2f(2, 1);
glVertex3f(0,level->length, 100);
glTexCoord2f(2, 0);
glVertex3f(0, 0, 100);
glNormal3f(90, 0, 0);
glTexCoord2f(0, 0);
glVertex3f(0, 0, 100);
glTexCoord2f(0, 2);
glVertex3f(level->width, 0, 100);
glTexCoord2f(2, 2);
glVertex3f(level->width, 0, 0);
glTexCoord2f(2, 0);
glVertex3f(0, 0, 0);
glEnd();
glEndList();
以下是在程序开始时初始化的 OpenGL 设置:
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DOUBLEBUFFER);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
float pos[] = { -30, -30, 30 };
float intensity[] = { 1,1,1,1 };
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glLightfv(GL_LIGHT0, GL_SPECULAR, intensity);
glLightfv(GL_LIGHT1, GL_POSITION, pos);
glLightfv(GL_LIGHT1, GL_SPECULAR, intensity);
float diff[] = { 0.6f, 0.6f, 0.75f };
glLightfv(GL_LIGHT1, GL_DIFFUSE, diff);
...
问题的原因可能是什么?谢谢。
更新:不要被球的阴影弄糊涂了,它只是位于球下方的启用透明的纹理,它不是真正的阴影。
【问题讨论】:
-
我改变了我的答案。怎么样?