无法正确禁用 GL 颜色材质

can't properly disable gl color material

本文关键字:GL 颜色      更新时间:2023-10-16

我有一个灯光效果很好的场景。我想添加一个会逐渐消失的天空框,所以我使用

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)

,但这只是让淡出工作,仍然没有显示我的照明。奇怪的是,if do

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
(..light details..)
glEnable(GL_COLOR_MATERIAL);
glDisable(GL_COLOR_MATERIAL);
(drawSkyBox)
(draw rest of scene)

我失去了褪色和灯光效果。我是否正确使用GL_COLOR_MATERIAL ?如果我立即启用和禁用,不应该没有效果,让我的照明完好无损吗?

天空框可能不应该受到照明的影响。没有什么比天空和云层上的大反光更奇怪的了。所以在渲染的时候禁用光照是有意义的。如果照明是关闭的,顶点只是采取任何颜色你分配他们(使用glColor)。

如果照明是打开的,顶点将采取灯光的颜色和材料属性的组合。你可以为每个顶点分别设置环境色、漫反射色和高光色滤镜,它们将与灯光的相关颜色以及一些其他数学运算相乘,以考虑方向和衰减。如果,通常情况下,你只改变环境和漫反射的颜色,你希望它们是相同的,因为你已经设置了光源的环境和漫反射属性都是白色的,并且环境明显比漫反射暗,那么你可以启用COLOR_MATERIAL,然后设置glColor()与使用GL_AMBIENT_AND_DIFFUSE调用glMaterial相同。