Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在opengl中将两个纹理绘制到新纹理_Java_Opengl_Lwjgl - Fatal编程技术网

Java 在opengl中将两个纹理绘制到新纹理

Java 在opengl中将两个纹理绘制到新纹理,java,opengl,lwjgl,Java,Opengl,Lwjgl,我基本上有两个纹理,一个基础,一个覆盖。我需要两个画他们两个到一个新的纹理 因此,如果纹理1是: AAAAA BBBBB CCCCC 纹理2是: B B A 然后它应该返回: ABAAA BBBBB CACCC 除非是真实的纹理,而不是字母 (注意:空字符为透明字符,将被忽略) 更新1: 我不能使用着色器,因为这是在一个modding环境中,我需要绑定一个由外部渲染器绘制的纹理。这有意义吗 更新2: 第二个图像的alpha可以是任何内容。0.0或透明意味着不使用它并使用第一个图像,否

我基本上有两个纹理,一个基础,一个覆盖。我需要两个画他们两个到一个新的纹理

因此,如果纹理1是:

AAAAA
BBBBB
CCCCC
纹理2是:

 B
 B
 A
然后它应该返回:

ABAAA
BBBBB
CACCC
除非是真实的纹理,而不是字母

(注意:空字符为透明字符,将被忽略)

更新1:

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

更新2:


第二个图像的alpha可以是任何内容。0.0或透明意味着不使用它并使用第一个图像,否则使用第二个图像

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

  • 创建并分配结果纹理
  • 创建并绑定FBO(
    glGenFramebuffers
    glBindFramebuffer
  • 将结果纹理附加到FBO
  • 将两个输入纹理绑定到两个不同的纹理单元
  • 使用从两个纹理采样的片段着色器绑定程序,并混合它们。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);
    }
    
  • 设置属性、制服等

  • 渲染屏幕大小的四边形

  • 你要找的是混合。基本上,首先使用纹理1绘制一个四边形,然后使用纹理2绘制一个四边形,其中纹理2的颜色由alpha值加权。因此,如果纹理2的alpha值为0,则会看到纹理1,如果alpha值为1,则会看到纹理2。这可以使用多纹理或着色器实现(但不会创建单个输出纹理)。纹理2使用哪种透明度?只有0.0和1.0?你能解释为什么它们需要组合成一个纹理而不是同时应用两个纹理吗?