我已经在游戏引擎上工作了一个月,我已经完成了基本的OpenGL工作。然而,有一件事我不能像我期望的那样工作,那就是照明。(注:这是我第一次认真使用OpenGL)
我想要的是一个接近真实的灯光模拟--面对灯光的表面比距离较远的表面更亮,等等。基本灯光应该有一个位置和一个颜色。这就是我认为它可以实现的方式:
float lightv[4]; // populated with (0.6, 0.6, 0.6, 1)
float positionv[4]; // populated with (0, 10, 0, 1)
int lightID = GL_LIGHT0;
int attenuationType = GL_LINEAR_ATTENUATION;
float attenuationValue = 1;
glLightf(lightID, attenuationType, attenuationValue);
glLightfv(lightID, GL_DIFFUSE, lightv);
glLightfv(lightID, GL_POSITION, positionv);
glEnable(lightID);而不是做我期望它做的事情,它给我照明,就好像相机所在的地方有光一样!每个表面都有相同的照明!
我做错了什么?
谢谢,我很感激。
发布于 2010-11-03 09:18:03
首先要做的是确保在某个时刻调用了glEnable(GL_LIGHTING);。除此之外,首先要检查的是你的法线是否正确。为了使照明正常工作,您需要为绘制的每个顶点设置法线。如果已经设置了法线,则应确保它们都是单位长度。如果它们的长度不是1,则照明的行为可能会很奇怪。如果这些都是应该的,那么您应该记住,设置灯光的位置时,当前的模型视图矩阵会将其修改,就好像它是一个顶点一样。如果这些都不相关,我会看看我是否能想出更多的东西。
发布于 2010-11-03 10:25:31
在设置GL_MODELVIEW变换之后设置灯光位置,因为它受当前变换矩阵的影响。否则,你会得到你所发现的“前灯”效果。
https://stackoverflow.com/questions/4083306
复制相似问题