Why doesn't my open gl ambient lighting work?
我的大部分照明都按照我想要的方式工作,但我似乎完全错过了任何环境照明。也就是说,事物远离太阳的一面是完全黑色的(我希望有 50% 的环境光),而朝向太阳的一面看起来像我预期的那样亮。
这是我的照明设置代码(根据原文编辑,请参见下面的注释):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | - (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)。我所有的法线似乎都是正确的;如果我关闭照明,一切都会正确绘制(只是平光。)
有什么提示吗?
谢谢!
编辑(添加屏幕截图。)
根据评论编辑,我将环境值提高到 2.0,现在它看起来像我期望的大约 50% 环境值。这看起来很奇怪——我认为光照值被固定在 [0, 1]...?关于环境光的什么基本概念我没有理解?
在您的代码中,您没有启用
此外,没有必要使用大于 1 的颜色值,因为它们无论如何都被限制为 [0,1]。