gpt4 book ai didi

opengl - 在 OpenGL 中,有没有办法根据着色器中单独 channel 的值进行混合?

转载 作者:行者123 更新时间:2023-12-02 08:22:22 24 4
gpt4 key购买 nike

在 OpenGL(不是 ES)中,是否有一种通用的方法可以在基于另一个纹理或变量的值进行绘制时基于纹理进行混合?在 OpenGLES 上,我知道我可以通过 GL_EXT_shader_framebuffer_fetch 等扩展在某些平台上进行自定义混合。我问的原因是我有一个特殊的纹理,其中第四个 channel 不是 alpha,我需要能够将它混合在一个单独的 alpha 上,该 alpha 可以在不同的 map 上使用。

最佳答案

您需要双源混合,它在 OpenGL 3.3 的核心中可用。这允许您提供具有两个输出的片段着色器,并在混合函数中使用它们。

您可以像这样在片段着色器中声明输出:

layout(location = 0, index = 0) out vec4 outColor;
layout(location = 0, index = 1) out vec4 outAlpha;

然后您可以像这样为预乘 alpha 设置混合函数:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC1_COLOR);

或非预乘 alpha:

glBlendFunc(GL_SRC1_COLOR, GL_ONE_MINUS_SRC1_COLOR);

注意这里的SRC1是片段着色器的第二个输出。如果我没记错的话,这种混合仅适用于一个位置。

关于opengl - 在 OpenGL 中,有没有办法根据着色器中单独 channel 的值进行混合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35875259/

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