gpt4 book ai didi

c++ - 无法正确禁用 gl 颜色 Material

转载 作者:行者123 更新时间:2023-11-28 03:19:03 24 4
gpt4 key购买 nike

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

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?如果我立即启用和禁用,难道不应该没有效果,让我的照明完好无损吗?

最佳答案

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

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

关于c++ - 无法正确禁用 gl 颜色 Material ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com