Java 在同一曲面上映射多个纹理

Java 在同一曲面上映射多个纹理,java,opengl,jogl,texture-mapping,render-to-texture,Java,Opengl,Jogl,Texture Mapping,Render To Texture,我正在渲染一个圆柱体,并将两种不同的纹理映射到顶面和底面 这两种纹理都以以下方式加载: check3dFloorFile = new File(check3dFloorPath); try {     check3dFloorTexture = TextureIO.newTexture(check3dFloorFile, true);    } catch (IOException | GLException ex) {        Logger.getLogger

我正在渲染一个圆柱体,并将两种不同的纹理映射到顶面和底面

这两种纹理都以以下方式加载:

    check3dFloorFile = new File(check3dFloorPath);
    try {
        check3dFloorTexture = TextureIO.newTexture(check3dFloorFile, true);
    } catch (IOException | GLException ex) {
        Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
    }
       
    check3dFloorTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, 
                                                   GL2.GL_LINEAR_MIPMAP_LINEAR);
    check3dFloorTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, 
                                                                 GL2.GL_LINEAR);
               
    check3dFloorBackFile = new File(check3dFloorBackPath);
           
    try {
        check3dFloorBackTexture = TextureIO.newTexture(check3dFloorBackFile, true);
    } catch (IOException | GLException ex) {
        Logger.getLogger(Viewer.class.getName()).log(Level.SEVERE, null, ex);
    }
     
    check3dFloorBackTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, 
                                                 GL2.GL_LINEAR_MIPMAP_LINEAR);
    check3dFloorBackTexture.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, 
                                                               GL2.GL_LINEAR);
当我尝试渲染到纹理(空白纹理,与前两个纹理无关)时会出现问题:

一旦执行此代码,映射到圆柱体顶部的纹理将消失,所有顶部将变为黑色

为什么?

Ps:我的任务是将第三个渲染纹理映射到圆柱体顶部,映射到已经存在的纹理上

gl.glBindTexture(GL2.GL_TEXTURE_2D, textureID[0]);
/*... */
gl.glGenFramebuffers(1, frameBufferID, 0);
gl.glBindFramebuffer(GL2.GL_FRAMEBUFFER, frameBufferID[0]);

//Attach 2D texture to this FBO
gl.glFramebufferTexture2D(GL2.GL_FRAMEBUFFER, GL2.GL_COLOR_ATTACHMENT0, 
                                GL2.GL_TEXTURE_2D, textureID[0], 0);

您需要首先从纹理目标解除纹理绑定,然后才能将其附加到的帧缓冲区选作渲染目标。因为你不这样做,你将不渲染该纹理,因此它将显示为空白。

我不明白…你说的“纹理目标”是什么意思?如何解除绑定?调用
glBindTexture(GL\u TEXTURE\u 2D,0)glBindFramebuffer
之前执行code>。如果FBO颜色附着纹理已绑定到多个纹理单元,则必须为每个纹理单元解除绑定。它正在工作,我可以看到现在我正在纹理上正确渲染。。(使用一些特殊的缓冲)现在的问题是如何在同一个曲面上应用两个纹理:目前我已经在圆柱体顶部映射了check3dFloorTexture。我想在这个上面添加我渲染到的纹理(我需要使用一些特殊的混合功能)。我该怎么做?@elect:使用名为multitexturing的方法。有关于它的教程。
gl.glBindTexture(GL2.GL_TEXTURE_2D, textureID[0]);
/*... */
gl.glGenFramebuffers(1, frameBufferID, 0);
gl.glBindFramebuffer(GL2.GL_FRAMEBUFFER, frameBufferID[0]);

//Attach 2D texture to this FBO
gl.glFramebufferTexture2D(GL2.GL_FRAMEBUFFER, GL2.GL_COLOR_ATTACHMENT0, 
                                GL2.GL_TEXTURE_2D, textureID[0], 0);