为什么我的开放式环境照明不起作用?

时间:2011-06-04 17:44:49

标签: opengl lighting ambient

我的大部分照明都按照我想要的方式工作,但我似乎完全没有任何环境照明。也就是说,东西偏离太阳的一面都是黑色的(我希望环境能达到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()绘制单位对齐的纹理映射单位立方体(一个MineCraft)。我所有的常态似乎都是正确的;如果我关灯,一切都正确(只是平光。)

任何提示?

谢谢!

修改(已添加屏幕截图。)

Here's a screenshot of the problem

编辑根据评论,我将环境值提高到2.0,现在它看起来像我期望的大约50%环境。这看起来很糟糕 - 我认为照明值固定在[0,1] ......?关于环境光的基本概念是不是我不喜欢?

1 个答案:

答案 0 :(得分:2)

在您的代码中,您未启用GL_COLOR_MATERIAL。因此,如果您没有设置环境材质颜色(通过glMaterial调用GL_AMBIENT),则其默认值为(0.2,0.2,0.2),这将导致您的屏幕截图乘以(1,1, 1)(灯光的环境)。

此外,没有必要使用大于1的颜色值,因为它们被钳制到[0,1]。