【问题标题】:Point Light not rendering点光源不渲染
【发布时间】:2014-04-29 04:28:42
【问题描述】:

我正在尝试在我的场景中渲染几个点光源,但无法让实际的灯光照亮。我要工作的唯一光源是一个定向灯,它最初会照亮场景:

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

我在 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;

【问题讨论】:

    标签: c++ opengl glsl lighting


    【解决方案1】:

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

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

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

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

    如果有人能解释发生了什么,将不胜感激。

    【讨论】:

    • 可能是你没有正确设置灯光的位置
    • @ratchetfreak 我硬编码了灯光的位置并添加了一个实际的摄像头,这样我就可以实时看到发生了什么。当我像在图片中一样四处走动时,我得到了相同的结果。红色和蓝色停留在相机视野的左右两侧,而不是原地不动。
    • 然后你将光设置在相机空间而不是物体空间
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2015-04-14
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    相关资源
    最近更新 更多