2013-01-25 54 views
1

我设法在屏幕上显示图像。但是当我把多个图像放在一起时,半透明的边缘是黑色的,它并没有真正达到我期望的效果。我使用的是Galaxy Note的2OpenGL ES中质量不好的纹理

这是它的外观: enter image description here

我想瓷砖接近对方,没有任何黑边。我还没有为瓷砖编写任何正确的坐标,所以请不要介意。问题是应该是半透明的黑色边缘。

这是绘制方法的代码:

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

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

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


    gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, pIndex.length, GL10.GL_UNSIGNED_SHORT, pBuff); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
} 

并加载质地:

public void loadGLTexture(GL10 gl, Context context) { 
    Bitmap bitmap = null; 

    if (Math.random() > .3) { 
     bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.tile_grass); 
    } else { 
     bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.tile_sand); 
    } 

    gl.glGenTextures(1, textures, 0); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

    bitmap.recycle(); 
} 

回答

1

解决它,我必须补充一点:

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
+0

让我你猜测你只启用了alpha测试,对吧? – datenwolf

+0

深度测试,不确定它实际上是什么意思,我是OpenGL的新手 –