讀取的圓圈更接近觀察者,並且紋理具有透明背景。OpenGL混合模式和深度緩衝區
(兩個物體都是相同大小的正方形,只是不同的紋理和x,z座標)。
我想:
但我有:
我知道我必須做一些與混合模式,也許深度緩衝,但我不確切地知道什麼。有人能幫我嗎?
當前的代碼加載質地:
public void initTexture(GL10 gl, Bitmap bitmap) {
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
int[] texture = new int[1];
gl.glGenTextures(1, texture, 0);
textureId = texture[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
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);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
GLUtils.texImage2D(GLES10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
}
圖的相關部分,對每個對象:
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
gl.glDrawElements(GLES20.GL_TRIANGLES, indices.length, GLES10.GL_UNSIGNED_SHORT, indicesBuffer);
謝謝!
注:我使用的OpenGL ES 1
沒有改變任何東西,除了兩個物體的顏色現在更明亮(如柔和)。 – Ixx 2013-03-03 20:02:13
哦,是的,我正在考慮'glAlphaFunc'是否嘗試過Bartek的解決方案?它似乎相關。 – Guian 2013-03-05 10:25:08
是的,但它並不完整,我的第一次嘗試沒有改善任何東西...當我有時間時會嘗試更多。 – Ixx 2013-03-14 09:46:54