3

読み取り円がビューアに近くなり、テクスチャの背景が透明になります。

(両方のオブジェクトは同じサイズの正方形で、テクスチャと 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 を使用しています。

4

3 に答える 3

0

ブレンド関数を変更する必要があると思います:

試す :

 gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_DST_ALPHA);
于 2013-03-03T19:59:58.807 に答える
0

深度バッファへの書き込みを無効にする必要があります。

glDepthMask(false);

次に、最初に青い四角形を描き、次にその上に赤い四角形 (カメラに近い方) を描きます。透明なジオメトリを描画した後、 で深度バッファへの書き込みを再度有効にすることができますglDepthMask(true)

そうしないと、青いクワッドが赤いクワッドによってカリングされます。

于 2013-03-04T15:09:00.260 に答える