0

这是我的问题。

在我渲染一个带有 6 个透明多边形(GL_BLEND、源 GL_ONE、目标 GL_ONE)的立方体天空盒之后,我在一切之前渲染了一个正交四边形(填充视口)(每个角落都有顶点着色)。效果很好,天空盒由下面的四边形着色,由它自己的 UV 贴图纹理着色。

当我添加高度图(GL_BLEND,GL_ONE,...)时,问题就出现了。高度图与 + 下的天空盒与四边形混合。

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

我敢肯定还有另一种方法可以做到这一点。

是否可以先渲染正交四边形和天空盒(就像现在一样)然后使用特殊混合来渲染高度图,该混合减去天空盒而不是正交四边形与某种多通道混合?

非常感谢 !

迪米特里

4

2 回答 2

2

您的glBlendFuncwithGL_ONE, GL_ONE称为加法混合,并且具有可交换的良好属性(与任何加法一样),即 A+B = B+A。

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

在您的情况下,您可以绘制高度图和天空盒,而无需混合;然后你的全屏四边形混合。

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

  • 先画你的天空盒,然后画你的高度图
  • 以相反的方式绘制,GL_DEPTH_TEST启用以让 Z 缓冲区为您对像素可见性进行排序

希望这可以帮助

于 2011-02-26T22:12:54.803 回答
0

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

于 2011-02-26T21:11:40.147 回答