5

同时,我在纹理立方体旁边绘制了一个顶点彩色立方体,使用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),立方体也会被画成稍微亮一点的黄色,我无法切换回“最初的深黄色立方体颜色”。

你能告诉我这是否是预期的行为吗?

4

1 回答 1

1

这不完全是预期的行为,但应该很容易修复。GL_COLOR_MATERIAL 允许用顶点颜色覆盖材质属性。错误是颜色不仅在顶点颜色规范上被重写,而且在颜色材料启用上也被重写(我的猜测是它可能是为了防止错误而故意这样做的)。

要使立方体再次稍微变暗,您需要做的就是使用 glMaterialfv() 恢复默认颜色材质属性(可能是漫反射和环境颜色)。您可以在此处找到默认材质颜色

于 2012-01-23T15:34:14.247 回答