opengl 在重新缩放后应用 alpha mask
我需要使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你还没有说这个 alpha 蒙版到底从哪里来,或者你是如何生成它的。它可能是来自纹理的静态 alpha 蒙版或您在帧缓冲区中构建的内容。
如果它来自纹理,您可以使用着色器甚至只是纹理环境多重纹理轻松完成此操作。您将“重新缩放”的图像设置为一种纹理,将 alpha 蒙版设置为另一种纹理(作为 GL_INTENSITY 纹理,如果您使用的是核心 GL 3.1+,则为 GL_RED)。从主纹理中获取 RGB,但输出 Alpha 应来自蒙版纹理。然后正常进行 alpha 混合/测试/等。
如果 Alpha 是您已内置到帧缓冲区中的内容,那么只需使用正确的混合参数即可。有
GL_SRC_*
混合参数,但也有GL_DST_*
混合参数。您正在寻找基于GL_DST_ALPHA
和GL_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 alsoGL_DST_*
blend parameters. You're looking for something based onGL_DST_ALPHA
andGL_ONE_MINUS_DST_ALPHA