【问题标题】:Android OPEN GL ES multi-texturing draws nothingAndroid OPEN GL ES 多纹理不绘制任何内容
【发布时间】:2012-11-02 12:39:31
【问题描述】:

我是这个 OpenGL ES 的新手,我正在尝试使用多重纹理绘制一个矩形,但它没有显示任何内容,我不知道这有什么问题。任何建议或想法都会对我很有帮助。

这是我的代码:

我所做的是将一些在网上找到但尚未成功得到任何结果的代码汇总在一起。我可以分两次绘制这个,例如绘制两个具有不同纹理的矩形并产生所需的结果。

我使用了一些GL11GL10 组合可能是这是一个错误。 :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);

【问题讨论】:

  • fadeAnimation() 是做什么的?

标签: android opengl-es opengl-es-1.1 multitexturing


【解决方案1】:

1) 如果某些常量不受 GL10 支持,那么它们的功能也不受支持。只需使用 GL11 即可。无论如何,GL11 扩展了 GL10。 GL10 将看到 GL11 常量,并且可能最终什么都不做,或者至少什么都不做。

2) 我不确定fadeAnimation() 做了什么,但有些东西告诉我,在你开始对第二个纹理做任何事情之前,你会想把它放进去。也就是说,把它放在//------------------------ 之后。无论如何,这就是您在第二个代码块中完成的方式。

3) 在gl.glActiveTexture(GL11.GL_TEXTURE1) 之后,您不需要第二次致电gl.glEnable(GL_TEXTURE_2D)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多