Пример #1
0
        // add a subset of an array as a mesh.
        public void AddCollidableMeshToTree(List <VertexPositionColor> collisionVertices,
                                            int collisionStart, int count)
        {
            int collisionEnd = collisionStart + count; //collisionVertices.Count;

            if (collisionStart != collisionEnd)
            {
                // break large meshes into triangles to improve AABB tree.
                // TODO - also split meshes with large areas?
                if (collisionEnd - collisionStart > 8000)
                {
                    // add individual triangles from mesh
                    for (int i = collisionStart; i < collisionEnd;)
                    {
                        var points = new Vector3[3];
                        points[0] = collisionVertices[i++].Position;
                        points[1] = collisionVertices[i++].Position;
                        points[2] = collisionVertices[i++].Position;
                        m_collisionMeshTree.Insert(BoundingBox.CreateFromPoints(points), points);
                    }
                    return;
                }
                {
                    // Add collidable mesh to bb tree
                    var points = new Vector3[collisionEnd - collisionStart];
                    for (int i = collisionStart, dst = 0; i < collisionEnd; i++, dst++)
                    {
                        points[dst] = collisionVertices[i].Position;
                    }
                    m_collisionMeshTree.Insert(BoundingBox.CreateFromPoints(points), points);
                }
            }
        }