opengl 在重新缩放后应用 alpha mask

发布于 2024-12-03 11:44:00 字数 165 浏览 2 评论 0原文

我需要使用 alpha 蒙版在 openGL 中合并两个图像。

但是 - 我需要在图像重新缩放到显示尺寸后应用 alpha 蒙版 - 即。 Alpha 蒙版位于屏幕而不是图像坐标中。

我认为有一种方法可以在 opengl 2.0 中创建目标 alpha 缓冲区,但我不记得它的名称了。

I need to merge two images in openGL using an alpha mask.

BUT - I need the alpha mask to apply after the images have been rescaled to the display size - ie. the alpha mask is in screen not image coords.

I thought there was a way of doing a destination alpha buffer in opengl 2.0 but I can't remember the name of it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

惜醉颜 2024-12-10 11:44:00

你还没有说这个 alpha 蒙版到底从哪里来,或者你是如何生成它的。它可能是来自纹理的静态 alpha 蒙版或您在帧缓冲区中构建的内容。

如果它来自纹理,您可以使用着色器甚至只是纹理环境多重纹理轻松完成此操作。您将“重新缩放”的图像设置为一种纹理,将 alpha 蒙版设置为另一种纹理(作为 GL_INTENSITY 纹理,如果您使用的是核心 GL 3.1+,则为 GL_RED)。从主纹理中获取 RGB,但输出 Alpha 应来自蒙版纹理。然后正常进行 alpha 混合/测试/等。

如果 Alpha 是您已内置到帧缓冲区中的内容,那么只需使用正确的混合参数即可。有 GL_SRC_* 混合参数,但也有 GL_DST_* 混合参数。您正在寻找基于 GL_DST_ALPHAGL_ONE_MINUS_DST_ALPHA 的内容

You haven't said where exactly this alpha mask comes from or how you generate it. It could be a static alpha mask from a texture or something you build in the framebuffer.

If it comes from a texture, you can do this easily with shaders, or even just texture environment multitexturing. You set the image being "rescaled" as one texture and the alpha mask as the other (as a GL_INTENSITY texture, or GL_RED if you're using core GL 3.1+). Take the RGB from the main texture, but the output alpha should come from your mask texture. Then alpha blend/test/etc as normal.

If the alpha is something you have built into the framebuffer, then it's simply a matter of using the correct blend parameters. There are GL_SRC_* blend parameters, but there are also GL_DST_* blend parameters. You're looking for something based on GL_DST_ALPHA and GL_ONE_MINUS_DST_ALPHA

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文