0

我有灯光效果很好的场景。我想添加一个会消失的天空盒,所以我正在使用

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)

但这只是让淡入淡出工作并且仍然没有显示我的照明。奇怪的是,如果这样做

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
(..light details..)

glEnable(GL_COLOR_MATERIAL);
glDisable(GL_COLOR_MATERIAL);
(drawSkyBox)

(draw rest of scene)

我失去了淡入淡出和我的灯光效果。我是否正确使用 GL_COLOR_MATERIAL?如果我立即启用和禁用,不应该没有任何效果,让我的照明完好无损吗?

4

1 回答 1

2

天空盒可能不应该受到光照的影响。没有什么比你的天空和云层上的大闪亮镜面反射更让它看起来很奇怪的了。因此,在渲染时禁用照明是有意义的。如果照明关闭,顶点只会采用您指定的任何颜色(使用 glColor)。

如果照明打开,顶点将采用灯光颜色和材质属性的组合。您可以为每个顶点分别设置环境、漫反射和镜面反射颜色过滤器,它们将与来自灯光的相关颜色以及其他一些数学相乘,以考虑方向和衰减。如果通常情况下,您只更改环境和漫反射颜色,并且您希望它们相同,因为您已经将光源的环境和漫反射属性设置为白色,环境显着变暗比漫反射,那么您可以启用 COLOR_MATERIAL 然后设置 glColor() 与使用 GL_AMBIENT_AND_DIFFUSE 调用 glMaterial 相同。

于 2013-04-14T02:43:59.833 回答