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