透明天空盒+透明高度图的OpenGL混合问题

时间:2011-02-26 19:54:27

标签: opengl textures blend alphablending blending

这是我的问题。

我正在渲染一个正交四边形(填充视口)之前(在每个角落都有顶点着色),就在我渲染一个带有6个透明多边形的立方体天空盒(GL_BLEND,源GL_ONE,dest GL_ONE)之后。这完美地工作,天空盒由下面的四边形半色,并由它自己的UV贴图纹理半色。

当我添加高度贴图(GL_BLEND,GL_ONE,...)时会出现问题。高度贴图与带有四边形的+下的天空框混合。

我想要的是与正交四边形混合但不与天空盒混合的高度图。我不想通过高度图看到天空盒。

我确信还有另一种方法可以做到这一点。

是否有可能首先渲染ortho quad和skybox(就像现在一样)然后使用特殊混合的高度图减去天空盒而不是使用某种多遍混合的正交四边形?

非常感谢!

迪米特里

2 个答案:

答案 0 :(得分:2)

glBlendFunc GL_ONE, GL_ONE被称为加法混合,并且具有良好的属性(如任何添加)是可交换的,也就是说A + B = B + A.

然后你可以按照其他顺序绘制你的东西,你的混合会给出相同的结果。

在您的情况下,您可以绘制高度贴图和天空盒,不用混合; 然后您的全屏四元组混合。

要防止高度贴图和天空盒重叠,您可以:

  • 首先绘制天空盒,然后绘制高度贴图
  • 以相反的方式绘制,启用GL_DEPTH_TEST让Z缓冲区为您调整像素可见性

希望这有帮助

答案 1 :(得分:0)

OpenGL不是场景图,因此在每个渲染步骤之后,所有现有内容上的所有进一步命令。 glBlendFunc(GL_ONE,GL_ONE);听起来不对,除非你真的想要添加这些值。我想你正在寻找glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);