我想將256 * 256紋理映射到多維數據集。當我這樣做時,正面和背面如預期的那樣,左和右面在z方向上反轉,並且頂面和底面被「污跡」成重複的模糊。我之前已經討論過這個問題,但是我能找到的唯一解決方案是使用quads,這些quads在Android的OpenGL ES2.0實現中不可用,或者創建一個包含所有面的頂點的頂點列表(而不僅僅是8個頂點),然後用索引0-23(而不是0-7)引用它們。OpenGL ES2 Android - 將2D紋理映射到GL_TRIANGLES多維數據集
使用給出結果上面的代碼如下IM:
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);
}
我認爲在後Mapping a square texture to a triangle接受的答案後,幾乎涵蓋了什麼即時通訊,如果它確實有可能在指數和質地我期待的方式。
感謝您的快速和明確的迴應 - 我現在明白爲什麼我試圖做的不工作。我不明白索引也用於紋理數組。有沒有辦法爲紋理使用單獨的索引數組,或者是匹配紋理頂點和立方體頂點數組的最佳做法? – user1648755