gpt4 book ai didi

java - 我可以使用 OpenGL-ES glBlendFunc 来影响混合以将目标考虑在内吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:26 26 4
gpt4 key购买 nike

标题看起来有点神秘,但我无法在那里真正解释我想做什么,所以我画了一张图来形象化我的问题:

enter image description here

黑色部分是透明的(又名 alpha = 0)。我在帧缓冲区中有蓝色对象(左),我想在其上渲染白色位图(中),使其看起来像合并后的位图(右)。

问题是如果我使用标准的 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 白色对象的整个部分都会显示。我不希望它与帧缓冲区(蓝色)中的内容完全重叠,但只在它具有 alpha 值 > 0(可见)的部分可见。然后它还应该考虑自己的 alpha 值(注意白色对象中的孔)。

glBlendFunc 可以实现类似的功能吗?还是我必须为此编写一个着色器?

PS:我在 http://www.khronos.org/opengles/documentation/opengles1_0/html/glBlendFunc.html 查看了 glBlendFunc 的文档。但我真的没有得到任何帮助。

PPS:我在带有 C++ 的 Android 上使用 OpenGL-ES 2.0,但我认为语言/平台并不是那么重要。

最佳答案

我认为纯粹使用混合函数不可能做到这一点。您希望源像素与源和目标 alpha 相乘,而 blendfunc 只允许其中之一。

然而,使用模板缓冲区可能会得到您想要的结果。我不是这方面的专家,但我认为您可以在绘制背景图像时将模板操作设置为递增,然后在绘制位图时将模板测试设置为拒绝模板 == 0 的位置(仍然启用混合以获得位图的透明区域正确)。您必须查看 glStencilOpglStencilFunc 的 API 才能确定要使用的确切参数。

glBlendFunc 和 glAlphaFunc 的某种组合也有可能,但这取决于它们的求值顺序,所以我不肯定。

关于java - 我可以使用 OpenGL-ES glBlendFunc 来影响混合以将目标考虑在内吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com