【问题标题】:Why doesn't my open gl ambient lighting work?为什么我的 open gl 环境照明不起作用?
【发布时间】:2011-06-04 17:44:48
【问题描述】:

我的大部分照明都按照我想要的方式工作,但我似乎完全错过了任何环境照明。也就是说,事物远离太阳的一面是完全黑色的(我希望有 50% 的环境光),而朝向太阳的一面看起来像我预期的那样亮。

这是我的照明设置代码(从原始编辑,见下面的注释):

- (void) setupLighting
{
    const float amb = 2.0;
    const float LightAmbient[][4]  = {  { amb, amb, amb, 1.0f },
                                        { amb, amb, amb, 1.0f }
                                    };
    const float LightDiffuse[] [4] = {  { 1.0f, 1.0f, 1.0f, 1.0f },
                                        { 1.0f, 1.0f, 1.0f, 1.0f }
                                    };
    const float LightPosition[][4] = {  { 1.0f,  4.0f, 2.0f, 0.0f },
                                        { 0.0f, 10.0f, 0.0f, 1.0f }
                                    };

    glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient[0]);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse[0]);
    glLightfv(GL_LIGHT0, GL_POSITION, LightPosition[0]);

    glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient[1]);
    // etc., snip -- no LIGHT1 for this round

    glColorMaterial (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glEnable(GL_COLOR);
    //glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHT0);
    //glEnable(GL_LIGHT1);
    glEnable(GL_LIGHTING);
}

(注意:LIGHT1 暂时被注释掉了——我只是想让 LIGHT0 做我想做的事。)

不确定它是否重要,但我正在使用 glDrawArrays() 绘制单元对齐、纹理映射的单元立方体(a la MineCraft)。我所有的法线似乎都是正确的;如果我关闭照明,一切都会正确绘制(只是平光。)

有什么提示吗?

谢谢!

编辑(添加截图。)

编辑每个 cmets,我将环境值提高到 2.0,现在它看起来像我期望的大约 50% 环境值。这看起来很奇怪——我认为光照值被固定在 [0, 1]...?关于环境光的什么基本概念我没有理解?

【问题讨论】:

  • 您是否尝试增加环境光并查看它是否会影响结果?如果是这样 - 灯正在工作
  • 也许我没听懂,但它们并不是全黑的。它们是深色的,但肯定不是黑色的。

标签: opengl lighting ambient


【解决方案1】:

在您的代码中,您没有启用GL_COLOR_MATERIAL。因此,如果您没有设置环境材质颜色(通过调用 glMaterialGL_AMBIENT),其默认值为 (0.2, 0.2, 0.2),当乘以 (1,1,1)(光的环境)。

此外,没有必要使用大于 1 的颜色值,因为它们无论如何都被限制为 [0,1]。

【讨论】:

  • 全局环境值乘以其他所有值是我缺少的部分。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2020-01-28
  • 1970-01-01
  • 2019-06-10
相关资源
最近更新 更多