Android OpenGL纹理着色

时间:2014-03-08 12:52:38

标签: android opengl-es textures

我正在尝试更改纹理的颜色,我的精灵中有2个渲染方法,一个没有颜色参数,一个有,如果只有一个对象被渲染,它可以正常工作,但如果我渲染示例1彩色纹理和1个普通纹理,都会着色 我猜我不得不重置glTextEnvf状态,但我不知道如何。

这是我的源代码

public void Render(GL10 gl)
{
   gl.glBindTexture(GL10.GL_TEXTURE_2D,textures[0]);

   gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
   gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

   gl.glVertexPointer(2, GL10.GL_FLOAT,0, verticesBuffer);
   gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

   gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0, vertices.length/2);
   //RESTORE
   gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
   gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
public void Render(GL10 gl,float r,float g,float b)
{
    gl.glBindTexture(GL10.GL_TEXTURE_2D,textures[0]);

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    gl.glColor4f(r,g,b,1.0f);
    gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE);


    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, verticesBuffer);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 2);

    //RESTORE
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}

1 个答案:

答案 0 :(得分:0)

在您想要着色的精灵中调用glDrawArrays后,将颜色设置回1:

gl.glColor4f(1, 1, 1, 1);

希望这有帮助