2011-06-04 34 views
0

我得到了大部分的照明工作,我想要的方式,但我似乎完全缺少任何环境照明。也就是说,事物的远离太阳的一面是完全黑色的(我希望有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); 
} 

(注:光线1注释掉现在 - 我只是试图让LIGHT0做我想做的。 )

不知道它是否重要,但我正在使用glDrawArrays()绘制单位对齐的纹理映射单位立方体(一个MineCraft)。我所有的法线似乎都是正确的。如果我离开照明关闭,所有东西都可以正确绘制(只是平坦的。)

任何提示?

谢谢!

编辑(新增截图)

Here's a screenshot of the problem

编辑每评论,我撞到的环境值高达2.0,现在它看起来像什么会期望为约50%的环境我。这看起来很糟糕 - 我认为照明值被固定在[0,1] ...?关于环境光的基本概念是不是在追求什么?

+0

您是否尝试增加环境光并查看它是否会影响结果?如果是这样 - 光线正在工作 – Andrew 2011-06-04 17:59:03

+0

也许我没有得到它,但它们并非完全黑色。他们是黑暗的,但肯定不是黑人。 – Bart 2011-06-04 18:14:27

回答

2

在您的代码中,您没有启用GL_COLOR_MATERIAL。所以如果你没有设置环境材质的颜色(通过调用glMaterialGL_AMBIENT),它的默认值是(0.2,0.2,0.2),当乘以(1,1,1)(灯的环境温度)时,这会导致你的屏幕截图。

此外,无需使用大于1的颜色值,因为无论如何这些值都被固定为[0,1]。

+0

全球环境价值乘以一切就是我失踪的那一点。谢谢! – Olie 2011-06-06 14:10:20