我的大部分照明都按照我想要的方式工作,但我似乎完全没有任何环境照明。也就是说,东西偏离太阳的一面都是黑色的(我希望环境能达到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)。我所有的常态似乎都是正确的;如果我关灯,一切都正确(只是平光。)
任何提示?
谢谢!
修改(已添加屏幕截图。)
编辑根据评论,我将环境值提高到2.0,现在它看起来像我期望的大约50%环境。这看起来很糟糕 - 我认为照明值固定在[0,1] ......?关于环境光的基本概念是不是我不喜欢?
答案 0 :(得分:2)
在您的代码中,您未启用GL_COLOR_MATERIAL
。因此,如果您没有设置环境材质颜色(通过glMaterial
调用GL_AMBIENT
),则其默认值为(0.2,0.2,0.2),这将导致您的屏幕截图乘以(1,1, 1)(灯光的环境)。
此外,没有必要使用大于1的颜色值,因为它们被钳制到[0,1]。