如何在android中使用OpenGL在另一个纹理上设置纹理

如何在android中使用OpenGL在另一个纹理上设置纹理,android,opengl-es,render-to-texture,Android,Opengl Es,Render To Texture,我已经搜索了两天了。我正在使用OpenGL开发一个android游戏,在这种情况下,我必须同时显示两个图像,一个应该是背景图像,另一个根据条件显示。 我已经使用Open GL Texture属性显示了背景图像。但是当我尝试使用Texture显示第二个图像时,第一个图像没有显示。因为我处理的是多个纹理,所以我使用了一个GLTexture类来操作纹理()。即使这样,我也无法同时显示两个图像 这里有一些代码: public void onSurfaceCreated(GL10 gl, EGLConfi

我已经搜索了两天了。我正在使用OpenGL开发一个android游戏,在这种情况下,我必须同时显示两个图像,一个应该是背景图像,另一个根据条件显示。 我已经使用Open GL Texture属性显示了背景图像。但是当我尝试使用Texture显示第二个图像时,第一个图像没有显示。因为我处理的是多个纹理,所以我使用了一个GLTexture类来操作纹理()。即使这样,我也无法同时显示两个图像

这里有一些代码:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    glTextures= new GLTextures(gl,this.context);//class to manipulate textures

   //adding image resources

    this.glTextures.add(R.drawable.back);

    this.glTextures.add(R.drawable.hand);

   //loading texture

   this.glTextures.loadTextures();

    gl.glEnable(GL10.GL_TEXTURE_2D);
   ...
}
在onDrawFrame中

   gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);

   gl.glLoadIdentity();

   gl.glTranslatef(0.0f, 0.0f, -3.5f);

   glTextures.setTexture(R.drawable.back);//it will bind this particular texture for drawing

  draw(gl);

  if(condition == 1){

            gl.glLoadIdentity();
            gl.glTranslatef(0.0f, 1.0f, -7.0f);
            glTextures.setTexture(R.drawable.hand);

            drawSecond(gl);
        }
////////////////////////////////////////////////////////
   public void draw(GL10 gl){

              gl.glActiveTexture(GL10.GL_TEXTURE0);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);


        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

  }


  public void drawSecond(GL10 gl){

        gl.glActiveTexture(GL10.GL_TEXTURE1);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        //GLES20.glUniform1i(isShaked, 1);
        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);


        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

   }
在绘图代码中

   gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);

   gl.glLoadIdentity();

   gl.glTranslatef(0.0f, 0.0f, -3.5f);

   glTextures.setTexture(R.drawable.back);//it will bind this particular texture for drawing

  draw(gl);

  if(condition == 1){

            gl.glLoadIdentity();
            gl.glTranslatef(0.0f, 1.0f, -7.0f);
            glTextures.setTexture(R.drawable.hand);

            drawSecond(gl);
        }
////////////////////////////////////////////////////////
   public void draw(GL10 gl){

              gl.glActiveTexture(GL10.GL_TEXTURE0);

        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);


        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

  }


  public void drawSecond(GL10 gl){

        gl.glActiveTexture(GL10.GL_TEXTURE1);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        //GLES20.glUniform1i(isShaked, 1);
        gl.glFrontFace(GL10.GL_CW);

        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length/3);


        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

   }
删除
“gl.glActiveTexture(GL10.gl_TEXTURE0);”
gl.glActiveTexture(GL10.gl_TEXTURE1)
来自呈现代码的行。

仅当需要多重纹理时,才使用多重纹理单元,
在一次绘制调用中使用多个纹理。


只需将第一个纹理绑定到活动纹理单元(默认为GL_TEXTURE0)并绘制第一个三角形条带,然后绑定第二个纹理(不更改活动纹理单元GL_TEXTURE0)并绘制第二个三角形条带。

事实上,我之前已经解决了这个问题,但是再次感谢您的回答。@Majid您好,您能提供一个链接给我一个以良好方式使用Mutli纹理的示例代码吗..前进Thanks@RenjithKN查看本页,它说明了不带GLSL的多重纹理