【发布时间】:2020-02-02 15:57:08
【问题描述】:
我同时使用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),立方体也会被画成稍微亮一点的黄色,我也无法切换回“初始深黄色立方体颜色”。
你能告诉我这是否是预期的行为吗?
【问题讨论】:
-
这确实看起来像一个错误。什么操作系统和什么类型的 GPU(NVidia、ATI)?
-
WinXP SP3 家庭版 ATI Radeon HD4850 OpenGL 版本 6.14.10.11251 最初我认为这是一个错误,但随后使用 PFD_GENERIC_FORMAT 进行了测试并得到了相同的结果。似乎在 glEnable(GL_COLOR_MATERIAL) 之后,OpenGL 状态颜色材料会以“某种”颜色即时更新。