在opengl中为新纹理绘制两个纹理

时间:2014-12-27 16:32:11

标签: java opengl lwjgl

我基本上有两个纹理,一个基础和一个叠加。我需要两个将它们绘制成一个新的纹理。

所以,如果纹理1是:

AAAAA
BBBBB
CCCCC

和纹理2是:

 B
 B
 A

那么它应该返回:

ABAAA
BBBBB
CACCC

除了它是实际纹理,而不是字母。

(注意:空字符是透明的,会被忽略)

更新1:

我不能使用着色器,因为这是在modding环境中,我需要绑定一个由外部渲染器绘制的纹理。这有意义吗?

更新2:

第二张图片的alpha可以是任何东西。 0.0或透明表示不使用它并使用第1张图像,否则使用第2张图像

1 个答案:

答案 0 :(得分:0)

您可以将生成的纹理设置为FBO作为附件,然后在片段着色器中混合两个输入纹理。这只是步骤的大纲:

  1. 创建并分配结果纹理。
  2. 创建并绑定FBO(glGenFramebuffersglBindFramebuffer)。
  3. 将结果纹理附加到FBO。
  4. 将两个输入纹理绑定到两个不同的纹理单元。
  5. 使用从两个纹理中采样的片段着色器绑定程序,然后混合它们。 GLSL代码看起来像这样:

    in vec2 TexCoord;
    uniform sampler2D Texture1;
    uniform sampler2D Texture2;
    out FragColor;
    void main() {
        vec4 texVal1 = texture(Texture1, TexCoord);
        vec4 texVal2 = texture(Texture2, TexCoord);
        FragColor = mix(texVal2, texVal1, texVal2.a);
    }
    
  6. 设置属性,制服等

  7. 渲染四倍的屏幕尺寸。