// Create/update the BoxList and BoxDrawList private void CreateBoxList() { BoxList.Clear(); BoxDrawList.Clear(); // on créé un tableau contenant la liste des sommets du modèles ModelMeshPart portionMaillage = Modèle.Meshes[0].MeshParts[0]; int tailleSommetEnFloat = portionMaillage.VertexBuffer.VertexDeclaration.VertexStride / sizeof(float); int tailleTamponEnFloat = portionMaillage.VertexBuffer.VertexCount * tailleSommetEnFloat; // On va chercher le contenu du tampon de sommets (vertex buffer) en float pour que cela fonctionne // avec les différents formats de sommets (VertexPositionNormalTexture, VertexPositionTexture, VertexPositionColor...) float[] sommetsDuModèles = new float[tailleTamponEnFloat]; portionMaillage.VertexBuffer.GetData <float>(sommetsDuModèles); int début = 0; //On crée une boîte de collision par maillage (un modèle contient de 1 à N maillages) foreach (ModelMesh maillage in Modèle.Meshes) { //On crée la boîte de collision (BoundingBox) correspondant à une partie du modèle et on l'ajoute à la liste des boîtes de collision BoundingBox boîteCollision = CalculerBoundingBox(maillage, sommetsDuModèles, tailleSommetEnFloat, ref début); BoxList.Add(boîteCollision); BoxDrawList.Add(CreateBoundingBoxBuffers(boîteCollision, Jeu.GraphicsDevice)); } }