2

私はこの OpenGL ES に慣れていません。マルチテクスチャリングを使用して四角形を描画しようとしていますが、何が問題なのかわかりません。どんな提案やアイデアも私にとって非常に役に立ちます。

これが私のコードです:

私が行ったことは、ネット上で見つかったいくつかのコードをまとめることですが、まだ結果を得ることができませんでした。テクスチャの異なる 2 つの四角形を描画するなど、2 つのパスでこれを描画でき、目的の結果が得られました。

私はいくつかを使用しGL11GL10組み合わせたのはこれが失敗である可能性があります. :PI 正しいかどうかはわかりません。一部の定数は を使用してサポートされていないため、これを行いGL10ました。

public void draw(GL10 gl) {
    if(status_flag == DISPLAYING_EYES) {                        
        vertexPointer(gl);          

        firstGanColorVert.position(0);
        gl.glColorPointer(4, GL11.GL_FLOAT, VERTEX_SIZE, firstGanColorVert);        
        //gl.glBindTexture(GL10.GL_TEXTURE_2D, firstGaneshaTexture);            

        gl.glActiveTexture(GL11.GL_TEXTURE0);
        gl.glEnable(GL11.GL_TEXTURE_2D);
        gl.glBindTexture(GL11.GL_TEXTURE_2D, firstGaneshaTexture);
        //Simply sample the texture
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_REPLACE);
        //------------------------
        gl.glActiveTexture(GL11.GL_TEXTURE1);
        gl.glEnable(GL11.GL_TEXTURE_2D);

        fadeAnimation();         
        secondGanColorVert.position(0);
        gl.glColorPointer(4, GL11.GL_FLOAT, VERTEX_SIZE, secondGanColorVert);        
        gl.glBindTexture(GL11.GL_TEXTURE_2D, secondGaneshaTexture);

        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_COMBINE);
        //Sample RGB, multiply by previous texunit result
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_COMBINE_RGB, GL11.GL_MODULATE);   //Modulate RGB with RGB
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_SRC0_RGB, GL11.GL_PREVIOUS);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_SRC1_RGB, GL10.GL_TEXTURE);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_OPERAND0_RGB, GL11.GL_SRC_COLOR);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_OPERAND1_RGB, GL11.GL_SRC_COLOR);
        //Sample ALPHA, multiply by previous texunit result
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_COMBINE_ALPHA, GL11.GL_MODULATE);  //Modulate ALPHA with ALPHA
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_SRC0_ALPHA, GL11.GL_PREVIOUS);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_SRC1_ALPHA, GL11.GL_TEXTURE);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_OPERAND0_ALPHA, GL11.GL_SRC_ALPHA);
        gl.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_OPERAND1_ALPHA, GL11.GL_SRC_ALPHA);

        gl.glMatrixMode(GL11.GL_MODELVIEW);
        gl.glLoadIdentity();            
        gl.glTranslatef(this.x,this.y ,0);          
        textCordPointer(gl);        
        gl.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_UNSIGNED_SHORT, indices); 
    }
}

これは私のために働くコードですが、これの代わりにマルチテクスチャリングを使用したいです:

firstGanColorVert.position(0);
gl.glColorPointer(4, GL10.GL_FLOAT, VERTEX_SIZE, firstGanColorVert);        
gl.glBindTexture(GL10.GL_TEXTURE_2D, firstGaneshaTexture);          

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();            
gl.glTranslatef(this.x,this.y ,0);  

textCordPointer(gl);        
gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, indices);   

fadeAnimation();

secondGanColorVert.position(0);
gl.glColorPointer(4, GL10.GL_FLOAT, VERTEX_SIZE, secondGanColorVert);
gl.glBindTexture(GL10.GL_TEXTURE_2D, secondGaneshaTexture);         

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();            
gl.glTranslatef(this.x,this.y ,0);          
textCordPointer(gl);        
gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, indices);
4

1 に答える 1

1

1) 一部の定数が GL10 でサポートされていない場合、それらの機能もサポートされていません。全体にGL11を使用するだけです。とにかくGL11はGL10を拡張します。GL10 は GL11 定数を認識し、おそらく何もしないか、少なくともやりたいことを何もしないことになります。

2) 何fadeAnimation()が機能するかはわかりませんが、2 番目のテクスチャで何かを開始する前に、それを配置する必要があるとのことです。つまり、 の直後に置き//------------------------ます。とにかく、これは 2 番目のコード ブロックで実行した方法です。

gl.glEnable(GL_TEXTURE_2D)3) afterへの 2 回目の呼び出しは必要ありませんgl.glActiveTexture(GL11.GL_TEXTURE1)

于 2012-11-07T03:46:59.683 に答える