首页 文章

SDL2 - 渲染纹理alpha通道

提问于
浏览
2

我正在寻找一种专门渲染纹理的alpha通道的方法 . 这个想法是在运行时创建一个“掩码”,即渲染一个纹理,作为另一个纹理的alpha通道 .

注意:我知道如何使用alpha通道和颜色键,所以请求't explain about those :) what I' m寻找是一种使用其他纹理在运行时动态生成掩码的方法 .

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

那可能吗?

2 回答

  • 2

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

    • 我使用的面具是黑白纹理:黑色是不透明的,白色是透明的 . 可以通过渲染到纹理在运行时生成掩码 .

    • 当面具纹理准备好后,我将其复制到另一个纹理并反转所有像素 . 让我们调用这个新纹理"inverted mask" .
      在渲染我想要遮罩的纹理之前

    • ,我使用加法混合在相同的位置和大小渲染反转的遮罩纹理 . 这将在我想要应用的蒙版形状上创建一个白色轮廓(因为它的添加剂黑色像素是透明的) .

    • 然后我使用添加剂混合在我想要遮罩的纹理上渲染蒙版本身 . 这会将背景变为白色(掩模应该是透明的像素现在是白色的 . 因为它的添加剂,黑色像素没有效果)

    • 最后我使用mod混合在屏幕上渲染纹理,正好在我在阶段3渲染的白色轮廓上 . 背景白色像素将是透明的(因为它的mod),白色轮廓现在将是纹理,蒙版 .

    注意:这不是理想的方法,它涉及多个渲染和操纵纹理像素 . 但这对我的具体案例和纯粹的SDL来说已经足够了 .

  • 1

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

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

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

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

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

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

相关问题