OpenGL:纹理和纯色对环境光的反应不同?

OpenGL:纹理和纯色对环境光的反应不同?

OpenGL: texture and plain color respond differently to ambient light?

这是我在OpenGL应用程序中遇到的一个相当老的问题。

我有一个相当复杂的模型,其中一些多边形没有纹理,使用glColor()使用纯色进行着色,而另一些则有纹理。 一些纹理与未纹理化的多边形具有相同的颜色,并且两者之间应该没有可见的接缝。

问题是当我调高光源的环境成分时,两种多边形之间会出现接缝。

看到这张图片:/d/jc/2023041712/nwlfodn50gr49.webp

左图没有环境光,右图则具有(0.2,0.2,0.2)的环境光。

纹理上颜色的RGB值与彩色面的RGB值相同。 各处的纹理alpha设置为1.0。

要着色纹理,我使用GL_MODULATE。

谁能想到发生这种情况的原因以及可能的解决方案?


您提到您使用glColor()设置了颜色,所以我假设GL_COLOR_MATERIAL处于打开状态? 您对glColorMaterial()使用什么设置? 在这种情况下,它应该为GL_AMBIENT_AND_DIFFUSE,以便glColor()调用影响环境颜色以及漫反射颜色。 (这是默认设置。)

您也可以尝试在渲染纹理映射面之前将所有材质颜色设置为白色(使用glMaterial())。 通过某些设置(不记得是哪个设置),纹理本身会受到当前颜色的调制。

希望这对您有所帮助或至少会为您指明有用的方向。


推荐阅读