J'essayais de rendre un cube et d'appliquer une seule texture sur toutes les faces. en utilisant aussi peu de sommets que possible en passant les index des sommets du visage. exemple:GLES20 Pourquoi les données de texture ne sont pas liées aux index des sommets?
sommets:
static final float FACE_VERTEX[] = {
// front
0.0f, 1.0f, 1.0f, //0
0.0f, 0.0f, 1.0f, //1
1.0f, 0.0f, 1.0f, //2
1.0f, 1.0f, 1.0f, //3
//back
1.0f, 1.0f, 0.0f, //4 - 3
1.0f, 0.0f, 0.0f, //5 - 2
0.0f, 0.0f, 0.0f, //6 - 1
0.0f, 1.0f, 0.0f, //7 - 0
};
index:
static final int FACE_INDEX[] = {
//front
0,1,2, 0,2,3,
//back
4,5,6, 4,6,7,
//left
7,6,1, 7,1,0,
//right
3,2,5, 3,5,4,
//top
4,7,0, 4,0,3,
//bottom
1,6,5, 1,5,2
};
données de mappage de texture:
final int textureCoordinateData[] =
{
// Front face
0,0, 0,1, 1,1, 1,0,
//back
0,0, 0,1, 1,1, 1,0,
//left
0,0, 0,1, 1,1, 1,0,
//right
0,0, 0,1, 1,1, 1,0,
//top
0,0, 0,1, 1,1, 1,0,
//bottom
0,0, 0,1, 1,1, 1,0,
//top
0,0, 0,1, 1,1, 1,0,
//bottom
0,0, 0,1, 1,1, 1,0,
};
La texture est rendue sur toutes les faces du cube, à l'exception supérieure et inférieure . seule la première rangée de pixels de la face avant sont rendus sur la totalité des faces supérieure et inférieure (voir figure):
J'utilise VBOs pour stocker les données vertex/index/texture dans le GPU , et le rendu avec
glDrawElements(GL_TRIANGLES, indexLength, GL_UNSIGNED_INT, 0);
Toutefois, cette question est parce que les données de texture doivent être mises en correspondance avec les données de sommet passées (ce qui est un peu gênant pour un modèle de cube) et n'est pas calculé par l'indice. Mes questions seront: - Y at-il un moyen de garder les données de sommets aussi bas que possible et mapper la texture aux données d'index? - Si je crée 36 sommets (certains sont répétés) pour résoudre le problème de mappage de texture, mais que j'ai créé les index corrects pour rendre le cube, serait-il encore plus rapide que d'utiliser glDrawArrays
? ou dois-je aller avec glDrawArrays
et trash les données d'indexation de toute façon?
question connexe (qui n'a pas répondu à ma question):
OpenGL ES - texture map all faces of an 8 vertex cube?
Si vous avez lu le premier commentaire sur la réponse:
Que voulez-vous dire que vous devez utiliser 24 vertexes? Si vous devez dupliquer les sommets, quel est le point d'utiliser un tampon d'index, alors si vous envoyez toujours des données de répétition au GPU?