OpenGL glEnable(GL_COLOR_MATERIAL)后跟glDisable(GL_COLOR_MATERIAL)

时间:2012-01-22 23:57:08

标签: opengl lighting material

我同时绘制了一个带有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),立方体也会被绘制得更亮黄色,我无法切换回“初始颜色较深的黄色立方体颜色”。

请告诉我这是否是预期的行为?

1 个答案:

答案 0 :(得分:1)

这不是预期的行为,但应该很容易修复。 GL_COLOR_MATERIAL允许使用顶点颜色覆盖材质属性。问题是颜色不仅要在顶点颜色规范上重写,而且还要在颜色材质上重写(我的猜测是它可能是为了防止错误而专门完成的)。

使用glMaterialfv()恢复默认颜色材质属性(可能是漫反射颜色和环境颜色)所需要做的就是使立方体再次变暗。您可以找到default material colors here