2012-11-02 3 views
2

저는이 OpenGL ES에 새로운 기능을 제공합니다. 멀티 텍스처링을 사용하여 사각형을 그리려하고 있지만, 그다지 이상한 점을 알지 못합니다. 모든 제안이나 아이디어는 나에게 매우 도움이 될 것입니다. 나는 아직 함께 그물에서 발견 된 일부 코드를 가지고있다 할 만 한 무엇안드로이드 OPEN GL ES 멀티 텍스처링은 아무 것도 그려 내지 않습니다

이 어떤 결과를 얻기 위해 성공 :

여기 내 코드입니다. 나는 다른 질감으로 두 개의 직사각형을 그리는 것과 같이 원하는 두 가지 패스로이 그림을 그리고 원하는 결과를 얻을 수 있습니다.

일부는 GL11이고 GL10은 결합 된 것일 수 있습니다. : P 나는 그것이 옳다는 것을 알지 못한다. 일부 상수는 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); 
    } 
} 

나를 위해 작동 코드입니다하지만 대신 멀티 텍스처링 사용하려면 : 일부 상수 GL10에서 지원하지 않는 경우)

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

'fadeAnimation()'의 기능은 무엇입니까? – GraphicsMuncher

답변

1

1을, 그 기능은 지원되지 않습니다 어느 한 쪽. GL11을 사용하면됩니다. GL11은 GL10을 확장합니다. GL10은 GL11 상수를 볼 것이고 아마 아무 것도하지 않거나 적어도 당신이 원했던 것은 아무것도하지 않을 것입니다.

2) 무엇이 fadeAnimation()인지 모르겠지만 두 번째 텍스처로 작업하기 전에 무엇을 넣어야하는지 알 수 있습니다. 즉, //------------------------ 바로 뒤에 넣으십시오. 어쨌든 두 번째 코드 블록에서이 작업을 수행 한 방법입니다.

3) gl.glActiveTexture(GL11.GL_TEXTURE1) 이후에 gl.glEnable(GL_TEXTURE_2D)으로 두 번째 전화 할 필요가 없습니다.