0

2つの三角形の平面にテクスチャを表示するのに問題があります。私のテクスチャは32x32RGBAビットマップです。私はアンドロイドのために開発しています。

私の飛行機は次のように作成されます:

    float[] vertices = new float[24];
    // first triangle
    vertices[0] = 0.0f;
    vertices[1] = 0.0f;
    vertices[2] = 0.0f;
    vertices[3] = 1.0f;

    vertices[4] = 0.0f;
    vertices[5] = fHeight;
    vertices[6] = 0.0f;
    vertices[7] = 1.0f;

    vertices[8] = fWidth;
    vertices[9] = fHeight;
    vertices[10] = 0.0f;
    vertices[11] = 1.0f;

    // second triangle
    vertices[12] = fWidth;
    vertices[13] = fHeight;
    vertices[14] = 0.0f;
    vertices[15] = 1.0f;

    vertices[16] = fWidth;
    vertices[17] = 0.0f;
    vertices[18] = 0.0f;
    vertices[19] = 1.0f;

    vertices[20] = 0.0f;
    vertices[21] = 0.0f;
    vertices[22] = 0.0f;
    vertices[23] = 1.0f;

私が管理したのは、平面を作成し、テクスチャの半分を表示することです。結果は次のようになります。 結果http://www.imagecrate.de/u/1346090743_texture.png

それで。テクスチャは最初の三角形にのみ表示されます。三角形が間違った順序でレンダリングされると問題になる可能性があると読みましたが、2番目の三角形の順序を変更しても効果はありません。また、黒い色が見えるところは透明な質感がいいと思いました。私が間違っているかもしれないことについて何か考えはありますか?

これが私のフラグメントシェーダーコードです:

precision mediump float;
varying vec2 vTexCoord;
uniform sampler2D sTexture; 
void main()
{
    gl_FragColor = texture2D(sTexture, vTexCoord); 
}

そして、これが私のテクスチャ座標です:

    float[] mVertsData1 =
        { 
                0.0f, 0.0f, // TexCoord 0
                0.0f, 1.0f, // TexCoord 1
                1.0f, 1.0f, // TexCoord 2
                1.0f, 0.0f // TexCoord 3
        };

私のレンダリングコードがここで役立つかどうかはわかりません。必要に応じて追加できます。しかし、私はこの質問を必要に応じて大きくしたくありません。多分誰かがここで何が起こるか知っています!?

前もって感謝します!Zerd1984

4

1 に答える 1

1

6つの頂点と4つのテクスチャ座標があります。両方の数を同じにする必要があります(6と6)。

頂点ごとに、同じインデックスでその頂点のtexcoordを定義する必要があります。頂点4はtexcoord4と一致する必要があり、頂点5はtexcoord5と一致する必要があります。

透明性を得るには、ブレンドを有効にする必要があります。glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

通常、レンダリングの問題が発生した場合は、常にレンダリングコードを含める必要があります。

于 2012-08-27T18:35:57.827 に答える