我是这个OpenGL 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);
}
}
以下是适用于我的代码,但我想使用多纹理而不是:
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 :(得分:1)
1)如果GL10不支持某些常量,则也不支持它们的功能。只需使用GL11就可以了。无论如何,GL11扩展了GL10。 GL10会看到GL11常数,可能最终无所事事,或者至少没有你想做的事情。
2)我不确定fadeAnimation()
是做什么但是有些东西告诉我你要在开始用你的第二个纹理做任何事情之前把它放进去。也就是说,将其放在//------------------------
之后。这就是你在第二个代码块中完成它的方式。
3)gl.glEnable(GL_TEXTURE_2D)
之后您不需要第二次拨打gl.glActiveTexture(GL11.GL_TEXTURE1)
。