2

请看一下这张图片。

预期形象和要求

  1. 我想显示纹理的剪裁细节,而剪裁矩形可以动画,因此我无法预先裁剪图像。图像的位置也是动画的。
  2. 我想在背景前展示它。背景是颜色或纹理本身。
  3. 我想将图像和背景与 opacity < 1.0 混合到目的地。
  4. 这里真正的要求是一步渲染它,避免临时缓冲区。显然,为此需要一个(简单的)着色器。

我已经尝试实现这一目标:

  • 首先渲染背景,然后渲染图像,每个图像的不透明度 < 1。这里的问题:它让背景在图像中闪耀。不允许在图像本身不透明的情况下看到背景。

  • 当使用 opacity = 1 将两者渲染到临时缓冲区中,然后将此缓冲区渲染到 opacity < 1 的目标时,它可以工作,但这需要更多(太多)资源。

  • 我可以在着色器中组合两个纹理(背景、图像),用不同的变换矩阵变换纹理坐标。这里的问题是,我无法剪辑图像。渲染的几何图形是一个由两个三角形组成的简单矩形。

有人可以提示我正确的方向吗?

4

1 回答 1

2

您基本上是在尝试渲染它。(图像与背景混合)与目的地混合

括号中的部分,您可以使用着色器,与目标的混合,您必须使用 glBlendFunc,因为目标在像素着色器中不可用。

听起来您知道如何在着色器中剪辑图像并通过动画纹理坐标来旋转它。

让我们将您的图像与 childreb 称为 ImageA 和灰色方形 ImageB

你希望你的着色器在每个像素上产生这个:

outputColor.rgb = ImageA.rgb * ImageA.a + ImageB.rgb * (1.0 - ImageA.a);

这会完全按照您的需要混合您的两个图像。现在将像素着色器的 alpha 输出设置为所需的 alpha (<1.0)

outputColor.a = <some alpha value>

然后,当您使用着色器渲染四边形时,请按如下方式设置混合功能。

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
<draw quad>
于 2012-10-16T01:03:06.673 回答