【发布时间】:2019-05-15 15:09:54
【问题描述】:
当我在我的 openGL 项目中旋转和/或移动相机时,几乎就像有一个聚光灯随之移动,但是我已经将我的 gl 灯设置为定位并给它一个静态位置。
void Lighting::Display()
{
glPushMatrix();
glTranslatef(0.f, yoffset, 0.f); // move to start
glTranslatef(0.f, ceilHeight * scale[0], 0.f);
DrawLight();
glDisable(GL_LIGHTING);
glPushAttrib(GL_ALL_ATTRIB_BITS);
// Match colour of sphere to diffuse colour of light
glColor4fv(specular);
glTranslatef(0.f, -10.0f * scale[1], 0.f);
glutSolidSphere(5.0f * scale[0], 25, 25);
glPopAttrib();
glPopMatrix();
// Re-enable lighting after light source has been drawn
glEnable(GL_LIGHTING);
// Set properties GL_LIGHT0
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
//glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0001f);
GLfloat pos[4] = { 0.f, 950.f, 0.f, 1.f };
glLightfv(GL_LIGHT0, GL_POSITION, pos);
// enable GL_LIGHT0 with these defined properties
glEnable(GL_LIGHT0);
}
我希望有一个单一的光源悬挂在场景的中心,光线从它的位置向所有方向均匀发射 然而,一束光似乎被发射为聚光灯。
这是展示问题的图片:
如您所见,发出了一条奇怪的光线。
【问题讨论】:
-
由于您使用的是旧版(非现代)OpenGL API,您可以使用gluLookAt 来移动眼睛位置而不是移动模型。
-
我指的相机已经使用 gluLookAt 移动了
-
@zombunny 天花板上的这个点是镜面高光,不是吗。镜面光取决于光的位置、法线向量和观察方向。当你改变观点时,特别的亮点必须改变。
-
啊,我明白这是个问题,这是否意味着我只能忍受它?
-
@zombunny 是的。你有某种反射球吗?用点光源照亮它并在它周围移动,然后你可以看到Blinn–Phong reflection model试图模仿的自然效果。当然效果很差,尤其是在已弃用的OpenGL固定功能光照模型的Gouraud shading处。
标签: c++ opengl lighting opengl-compat