コード例 #1
0
        // 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));
            }
        }