我的场景照明效果很好。我想添加一个会消失的天空盒,所以我正在使用
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
与glColor4f一起做这个,它工作正常。但是为了淡入淡出,我需要启用GL_COLOR_MATERIAL,它完全摆脱了我的灯光效果。我试着将天空盒子部分夹在中间
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
(..light details..)
glEnable(GL_COLOR_MATERIAL);
(drawSkyBox)|
glDisable(GL_COLOR_MATERIAL);
(draw rest of scene)
但这只是让淡入淡出工作但仍然没有显示我的灯光。奇怪的是,如果这样做
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
(..light details..)
glEnable(GL_COLOR_MATERIAL);
glDisable(GL_COLOR_MATERIAL);
(drawSkyBox)
(draw rest of scene)
我失去了褪色和我的灯光效果。我正确使用GL_COLOR_MATERIAL吗?如果我立即启用和禁用,不应该没有效果,让我的灯光完好无损吗?
答案 0 :(得分:2)
天空盒可能不会受到照明的影响。在你的天空和云彩上没有像闪闪发光的大镜子那样让它看起来很奇怪。因此,在渲染时禁用光照是有意义的。如果关闭灯光,顶点只会采用您指定的任何颜色(使用glColor)。
如果点亮,顶点将采用灯光的组合'颜色和材料属性。您可以为每个顶点单独设置环境光,漫反射和镜面反射颜色滤镜,并将它们与灯光中的相关颜色相乘,并与其他一些数学相乘,以考虑方向和衰减。如果通常情况下,您只是更改环境和漫反射颜色,并且您希望它们是相同的,因为您已经将光源的环境和漫反射属性设置为白色环境明显比漫反射暗,然后你可以启用COLOR_MATERIAL,然后设置glColor()与使用GL_AMBIENT_AND_DIFFUSE调用glMaterial相同。