0

256*256のテクスチャを立方体にマッピングしようとしています。そうすると、前面と背面が期待どおりになり、左右の面がz方向に反転し、上面と下面が繰り返しぼやけて「汚れ」ます。この問題は以前に取り上げましたが、私が見つけることができる唯一の解決策は、OpenGL ES2.0のAndroid実装で利用できないクワッドを使用するか、すべての面の頂点を含む頂点リストを作成することです( 8つの頂点)そして、インデックス0〜23(0〜7ではなく)でそれらを参照します。

上記の結果を与えるimusingコードは次のとおりです。

private float vertices[] = {

    //Front 
    -1.0f, -1.0f, 1.0f,  //0 Bottom Left
    1.0f, -1.0f, 1.0f,  //1 Bottom Right
    -1.0f, 1.0f, 1.0f,  //2 Top Left
    1.0f, 1.0f, 1.0f,  //3 Top Right

    //Back
    -1.0f, -1.0f, -1.0f, //4 Bottom Left
    1.0f, -1.0f, -1.0f, //5 Bottom Right
    -1.0f, 1.0f, -1.0f, //6 Top Left        
    1.0f, 1.0f, -1.0f //7 Top Right 
};

//Order to draw points in vertices array
private short indices[] = {
    //Faces definition
    0,1,2, 2,1,3, //Front
    5,4,7, 7,4,6, //Back
    1,5,3, 3,5,7, //Right 
    4,0,6, 6,0,2, //Left
    2,3,6, 6,3,7, //Top
    4,5,0, 0,5,1 //Bottom
};

private float textureVertices[] = {
    0.0f, 1.0f, //Front
    1.0f, 1.0f, 
    0.0f, 0.0f,
    1.0f, 0.0f,

    1.0f, 1.0f, //Back
    0.0f, 1.0f, 
    1.0f, 0.0f,
    0.0f, 0.0f,

    1.0f, 1.0f,
    0.0f, 1.0f, //Right 
    1.0f, 0.0f,
    0.0f, 0.0f,

    1.0f, 1.0f, //Left
    0.0f, 1.0f, 
    1.0f, 0.0f,
    0.0f, 0.0f,

    0.0f, 1.0f, //Top
    1.0f, 1.0f, 
    0.0f, 0.0f,
    1.0f, 0.0f,

    0.0f, 1.0f, //Bottom
    1.0f, 1.0f, 
    0.0f, 0.0f,
    1.0f, 0.0f

};

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

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

    gl.glFrontFace(GL10.GL_CCW);
    gl.glCullFace(GL10.GL_BACK);

    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesBuffer); 
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); 
    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,GL10.GL_UNSIGNED_SHORT,indicesBuffer);

    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glDisable(GL10.GL_CULL_FACE);
}

正方形のテクスチャを三角形にマッピングするという投稿で受け入れられた答えは、私が期待する方法でインデックスを付けてテクスチャを作成することが実際に可能である場合、その後のことをほぼカバーしていると思います。

4

1 に答える 1

1

配列は配列verticesのレイアウトと一致する必要がありますtextureVertices。つまり、8つの頂点はテクスチャキューブをレンダリングするのに十分ではありません。同じ位置にある頂点はindices、テクスチャと頂点配列の両方へのインデックスであるため、属する面に応じて異なるテクスチャ座標を持つ可能性があるためです。

エッジがあなたに面するように回転した立方体を考えてみましょう。エッジの左側で、テクスチャが終了します。右側から、テクスチャが始まります。

于 2012-09-05T13:26:29.340 に答える