Bonjour à tous,
J'ai quelques difficultés à comprendre le fonctionne de la méthode DrawIndexedPrimitives, notamment en ce qui concerne les différents offseats applicables en paramètre.
Ma situation est la suivante : je souhaite afficher un repère orthonormé (donc 3 lignes, une vers X, une autre vers Y et une troisième vers Z) ainsi qu'un triangle en 3D (soit trois vertex de déclarés). Jusque là aucun problème, je charge mes vertex et mes index sans difficulté. Au moment du rendu de ma scène, je génère alors un VertexBuffer qui contient tous mes points et un IndexBuffer qui contient tous mes indices. J'ai alors la structure suivante : (j'ai mis du pseudo-code, histoire de simplifier la lecture)
À cette étape, ma scène s'affiche correctement. Je cherche alors à ajouter un quatrième vertex dans mon VertexBuffer (qui ne sera évidemment pas utilisé pour afficher mon triangle). Là où je corse un peu les choses, c'est que pour mon triangle, je relie les vertex 6, 8 et 9.
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 VertexBufferDeTouteMaScene = { 0,0,0 // Mon repère orthonormé 1,0,0 0,0,0 0,1,0 0,0,0 0,0,1 0,0,0 // Le triangle 10,10,0 10,0,0 } IndexBufferDeTouteMaScene = { 0,1 // Mon repère orthonormé 2,3 4,5 6,7,8 // Le triangle }
Et pourtant, lors de l'affichage, c'est comme si j'avais relié les vertex 6,7 et 8 ensemble. J'ai donc regardé du côté de l'appel à DrawIndexedPrimitives où j'ai :
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 VertexBufferDeTouteMaScene = { 0,0,0 // Mon repère orthonormé 1,0,0 0,0,0 0,1,0 0,0,0 0,0,1 0,0,0 // Le triangle 0,10,0 // <-- je ne souhaite pas utiliser ce point pour dessiner le triangle 10,10,0 10,0,0 } IndexBufferDeTouteMaScene = { 0,1 // Mon repère orthonormé 2,3 4,5 6,8,9 // Le triangle }
Pour info :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 graphics.GraphicsDevice.DrawIndexedPrimitives( currentMesh.PrimitiveType, offsetReadVertex, 0, currentMesh.GetVertexList().Count, 0, currentMesh.GetNumberOfPrimitives());
- currentMesh.PrimitiveType = tantôt LineList, tantôt TriangleList
- offsetReadVertex = 0 lors de l'affichage du repère orthonormé, 6 lors de l'affichage du triangle
- currentMesh.GetVertexList().Count = 6 lors de l'affichage du repère orthonormé, 4 lors de l'affichage du triangle vu que j'ai 4 vertex dans mon VertexBuffer (doit-il valoir 3 ???)
- currentMesh.GetNumberOfPrimitives() = 3 lors de l'affichage du repère orthonormé, 1 lors de l'affichage du triangle vu que je n'affiche qu'une seule primitive
Sauriez-vous où j'ai commis une erreur ?
Merci d'avance pour vos réponses.
______
edit : Parce qu'une illustration vaut parfois mieux qu'un long discours, j'ajoute une capture d'écran de mon problème :
Mon triangle devrait être formé par les vertex 6, 8, 9 et pourtant, le vertex 7 est pris en compte
Partager