无法正确禁用 GL 颜色材质
can't properly disable gl color material
我有一个灯光效果很好的场景。我想添加一个会逐渐消失的天空框,所以我使用
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相同。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 双击更改 mfc 中列表控件中的行的颜色
- Visual Studio 19-17 库兼容性根据 GL 标志
- 更改 QT 中按钮的颜色
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 列表视图项的替代颜色
- GLSL 将 uint 转换为浮点颜色
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 如何将矢量对象更改为不同的颜色?
- 无法正确禁用 GL 颜色材质