点光源无法渲染

时间:2014-04-29 04:28:42

标签: c++ opengl glsl lighting

我正在尝试在我的场景中渲染几个点光源,但却无法让实际的灯光照亮。我开始工作的唯一一盏灯就是一个定向灯,最初照亮了现场:

Directional Light with no Point Light rendering

显示两块岩石的位置与两点光源的位置相同。我玩弄了漫反射,颜色和衰减值,但得到了相同的结果。但是当改变任何一种光的氛围时,颜色就会改变:

Directional Light with Ambient Intensity

我在GLSL中的计算是正确的,我的制服也被正确读取。但不知何故,我失去了弥漫的强度。 m_pointLight[0].DiffuseIntensity未注册更改,但如果使用注释的AmbientIntensity,则场景会显示为红色。

m_scale += 0.0057f;

// changing the value makes scene red
m_pointLight[0].AmbientIntensity = 0.5f;
// changing the value does nothing 
m_pointLight[0].DiffuseIntensity = 1.5f; 
// light color is red
m_pointLight[0].Color = glm::vec3(1.0f, 0.0f, 0.0f);
// position of light (same as rock) 
m_pointLight[0].Position = glm::vec3(3.0f, 1.0f, FieldDepth * (cosf(m_scale) + 1.0f) / 2.0f);
// Light decay
m_pointLight[0].Attenuation.Linear = 0.01f;

1 个答案:

答案 0 :(得分:0)

不是一个真正的答案,但我想出了我的问题的一部分:

问题是我正在寻找的角度。我的代码出了点问题。我最初将相机位置设置为(0,100,75)。将一小段代码移动到我设置视角和其他制服的位置后,点光源开始显示一点光。问题是当两块岩石移动时,靠近地板中心,第一块岩石的点光开始变红。第二块岩石也是如此,但它被设置为蓝色。但随着岩石靠近相机,颜色逐渐消失,直到它出现。然后当它移回中心时,颜色逐渐变得更亮到满负荷。

然后我认为这可能与我所处的角度有关。所以从相机位置(0,100,75)开始,我决定从地板的完整另一端看( - z轴为-75)。这就是我得到的:

enter image description here

剩下的唯一问题是,根据相机的位置,最靠近相机的点光源不会显示(除了最近的岩石下面)。右下方的图像是唯一正确显示所有灯光的图像:

enter image description here

如果有人可以解释发生了什么,我们将不胜感激。