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) :

Nom : inde-ji.png
Affichages : 131
Taille : 40,1 KoNom : Sans titre.png
Affichages : 128
Taille : 7,1 Ko


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 :
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
			}
		}
	}
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
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);
En total il y a :

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