Bonjour,
Je reviens encore vers vous car après avoir régler mes problèmes de V.B.O après la suite du tuto "moteur 3d c++" Yes::Engine, je rencontre un problème lorsque je souhaite afficher un Model 3D.
Dans les sources du Tuto il y à déja un Loader MD2. J'ai donc voulu utiliser un autre Loader (3DS) pour essayer de bien assimiler les classes CBuffer etc...
Comme on peut le voir si dessous j'ai deux résultat selon le changement d'une variable (préciser en dessous des images) :
Lorsque je parcours tous les indices des face et que je l'est stock dans le buffer d'indices normalement cela m'affiche que la moitier du personnage alors que si j'utilise le même procéder que le loader MD2 cela m'affiche le personnage mes avec des troues
voici le code de la boucle :
et voici les valeur exécuter par le V.B.O :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 std::vector<C_Model::TVertex> Vertices; std::vector<C_Model::TIndex> Indices; // Parcour tous les objets qui compose le model for (int i = 0; i < pModel.numOfObjects; i++){ if (pModel.pObject.size() <= 0) break; // récupère l'objet courant t3DObject *pObject = &pModel.pObject[i]; // Parcours tous les vertices qui compose l'objet for (int v = 0; v < pObject->numOfVerts; v++){ // Récupération des informations sur le sommet courant C_Model::TVertex newVertex; newVertex.Position = pObject->pVerts[v]; newVertex.Normal = *pObject->pNormals[v]; newVertex.Color = Renderer.ConvertColor(C_Color::White); // ajoute le vertex au tableau de vertices Vertices.push_back(newVertex); } // Parcour toutes les faces qui compose l'objet for (int j = 0; j < pObject->numOfFaces; j++){ // parcour les vertices qui compose la face for (int k = 0; k < 3; k++) { // récupère l'index du vertex int index = pObject->pFaces[j].vertIndex[k]; // ajoute l'index au tableau d'indices // Indices.push_back(j * 3 + 2 - k); <----- si l'on met cette ligne = perso à moitier Indices.push_back(index); // <----- si l'on met cette ligne = perso avec des troues } } }
En total il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 ////////////////////////////// // Buffer de vertices /////////////////////////////// glGenBuffers(1, &VertexBuffer); glBindBuffer(GL_ARRAY_BUFFER, VertexBuffer); glBufferData(GL_ARRAY_BUFFER, 12902 * 28, NULL, GL_STATIC_DRAW); ////////////////////////////// // Buffer d'indices /////////////////////////////// glGenBuffers(1, &IndexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexBuffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, 57174 * 28, NULL, GL_STATIC_DRAW); // vertices glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 28, BUFFER_OFFSET(0 + 0 * 28)); // normal glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 28, BUFFER_OFFSET(12 + 0 * 28)); // couleurs glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_UNSIGNED_BYTE, 28, BUFFER_OFFSET(24 + 0 * 28)); // Indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexBuffer->GetBuffer()); // Rendu // le 5113 viens de GL_UNSIGNED_SHORT // unsigned long IndicesType = (m_IndexStride == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT); DrawElements(GL_TRIANGLES, 19058 * 3, 5113, 0); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glBindBuffer(GL_ARRAY_BUFFER, 0);
Indices = 57174
Vertices = 12902
Si quelqu'un aurait une piste d'ou peut venir le problème ou autre.
J'espère que sa sera pas une erreur encore bête de ma part
Merci d'avance
Partager