Bonjour a tous,
Après une semaine à avoir épuché tous les types de tuto inimaginable pour chercher un moyen détecter convenablement la collision entre deux models, je craque et je me tourne vers vous.
J'aurai souhaité savoir comment parvenir à générer une bounding sphere, box voir meme un liste de box ou sphere décrivant parfaitement les contours de n'imorte quel model que j'importe.
En effet, je ne voit pas créer manuellement chaque bounding box ou sphere pour une map par exemple, la précision ne serait pas bonne en plus...
Jusqu'ici j'ai du tester tout se que j'ai trouvé sur la toile, se qui se rapproche le plus de se que je voulais faire c'était de créer une liste de bounding sphere en fonction de chaque mesh du model, mais si le model comporte des zones plates, la mesh est grande et sa me genère une sphere de collision 400 fois trop grande, du coup, j'ai un collision à 400m de l'objet par endroit :S
J'ai également testé de faire fonctionner se code qui a semblé ravir les personnes désirant faire ce que je cherche à faire ^^ mais sa ne tourne pas sur XNA 4.0 et les vertex se n'est pas encore ma tasse de thé ...
Je remercie toutes les personnes qui seront m'aider par tous les moyens possible, je désespère et un jeu 3D sans collision s'est comme un gâteau au chocolat... sans chocolat ^^
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 public BoundingBox GetBoundingBoxFromModel(Model model) { BoundingBox boundingBox = new BoundingBox() foreach (ModelMesh mesh in model.Meshes) { VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[mesh.VertexBuffer.SizeInBytes / VertexPositionNormalTexture.SizeInBytes]; mesh.VertexBuffer.GetData<VertexPositionNormalTexture>(vertices); Vector3[] vertexs = new Vector3[vertices.Length]; for (int index = 0; index < vertexs.Length; index++) { vertexs[index] = vertices[index].Position; } boundingBox = BoundingBox.CreateMerged(boundingBox, BoundingBox.CreateFromPoints(vertexs)); } return boundingBox; }
Merci d'avance a tous !!!!!!!!
Partager