SDL2 - 渲染纹理alpha通道

时间:2014-10-15 23:06:14

标签: sdl alpha sdl-2 alphablending

我正在寻找一种在纹理的alpha通道上专门渲染的方法。我们的想法是在运行时创建一个“蒙版”,即渲染一个纹理,作为另一个纹理的alpha通道。

注意:我知道如何使用alpha通道和颜色键,所以请不要解释那些:)我正在寻找的是一种在运行时动态生成掩码的方法其他纹理。

我更喜欢使用图形卡的解决方案,而不是涉及获取像素缓冲区并在cpu中操作它们。

可能吗?

2 个答案:

答案 0 :(得分:2)

很抱歉,如果我弄错了,但是因为你说“在alpha通道上”,那么就图形而言,通道只是AN图像的一个子组是不可能的。与rgb频道,bw频道,声道(深度等)等。

但是我想你想说的是把另一个图像放在原始蒙版的顶部,而顶部的图像应该看起来像覆盖下面的图像(然后调整透明度和中提琴),因此,发出“面具”的形象。 例如: 戴着面纱的新娘(新娘的脸是原始图像,而面纱是半透明的。通过观察,你会认为两者都只是一个图像。

有两种方法可以做到这一点,1是最简单的方法:

  1. 编辑将充当蒙版的图像并在图像处理程序中更改其不透明度,记得将其保存在png中。完成后,将第一个图像渲染为纹理,然后渲染不透明度编辑的图像。

  2. 与第一个相同,但不编辑第二个图像,只需在SDL2中编辑其alpha通道。 (使用此方法,您可以随时间动态控制它并将其渲染为纹理,从而利用图形卡。)

  3. 两者都会给出合并的2张照片的图像,第二张照片作为遮罩。

答案 1 :(得分:2)

回答可能感兴趣的其他人:

  1. 我使用的面具是黑白纹理:黑色是不透明的,白色是透明的。可以通过渲染纹理在运行时生成掩码。
  2. 当面具纹理准备好后,我将其复制到另一个纹理并反转所有像素。我们可以调用这个新纹理"倒置掩码"。
  3. 在渲染我想要遮罩的纹理之前,我使用加法混合在相同的位置和大小渲染反转的遮罩纹理。这将在我想要应用的蒙版形状上创建一个白色轮廓(因为它的添加剂黑色像素是透明的)。
  4. 然后我使用添加剂混合在我想要遮罩的纹理上渲染遮罩本身。这会将背景变为白色(掩模应该是透明的像素现在是白色的。因为它的添加剂,黑色像素没有效果)
  5. 最后我使用mod混合在屏幕上渲染纹理,正好在我在阶段3渲染的白色轮廓上。背景白色像素将是透明的(因为它的mod),白色轮廓现在将是纹理,掩蔽。
  6. 注意:这不是理想的方法,它涉及多个渲染和操纵纹理像素。但这足以让我的具体案例及其纯粹的SDL对我来说已经足够了。