我同时绘制了一个带有glDrawArrays()
的纹理立方体旁边的顶点彩色立方体,并发现在启用光照的情况下,纹理立方体变得“稍微亮一点”。
经过一些调试后,我发现调用glEnable(GL_COLOR_MATERIAL)
的第一个时刻,即使此后立即调用glDisable(GL_COLOR_MATERIAL)
,也会对纹理立方体产生“稍微明亮”的影响!
以下是简短说明:
glEnable(GL_COLOR_MATERIAL);
glDisable(GL_COLOR_MATERIAL);
(...)
glDrawArrays(GL_QUADS, 0, n);
如果根本没有调用glEnable(GL_COLOR_MATERIAL)
,则立方体将以黄色绘制。
如果glEnable(GL_COLOR_MATERIAL)
被调用,即使后跟glDisable(GL_COLOR_MATERIAL)
,立方体也会被绘制得更亮黄色,我无法切换回“初始颜色较深的黄色立方体颜色”。
请告诉我这是否是预期的行为?
答案 0 :(得分:1)
这不是预期的行为,但应该很容易修复。 GL_COLOR_MATERIAL允许使用顶点颜色覆盖材质属性。问题是颜色不仅要在顶点颜色规范上重写,而且还要在颜色材质上重写(我的猜测是它可能是为了防止错误而专门完成的)。
使用glMaterialfv()恢复默认颜色材质属性(可能是漫反射颜色和环境颜色)所需要做的就是使立方体再次变暗。您可以找到default material colors here。