2

私はパスを2日間探していました。OpenGLを使用してAndroidゲームを開発しています。このゲームでは、2つの画像を同時に表示する必要があり、1つは背景画像で、もう1つは表示されます。条件によって異なります。Open GL Textureプロパティを使用して背景画像を表示しましたが、テクスチャを使用して2番目の画像を表示しようとすると、最初の画像は表示されません。複数のテクスチャを扱っているため、GLTextureクラスを使用してテクスチャを操作しました(http: //tkcodesharing.blogspot.in/2008/05/working-with-textures-in-androids.html)それでも、2つの画像を同時に表示することはできません。

ここにいくつかのコードがあります:

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);

   }
4

1 に答える 1

1

レンダリングコードから行を削除 "gl.glActiveTexture(GL10.GL_TEXTURE0);"します。gl.glActiveTexture(GL10.GL_TEXTURE1);


複数のテクスチャユニットを使用するのは、1回の描画呼び出しで複数のテクスチャを使用するマルチテクスチャが必要な場合のみです。

最初のテクスチャをアクティブなテクスチャユニット(デフォルトはGL_TEXTURE0)にバインドして最初の三角ストリップを描画するだけで、2番目のテクスチャをバインドして(アクティブなテクスチャユニットGL_TEXTURE0を変更せずに)2番目の三角ストリップを描画します。

于 2012-09-05T19:17:09.893 に答える