大地无敌在尝试把命运艺术中的一些有用的代码和大家分享。
这个类略为扩展了一下MeshPart,于是用GetPositions()就可以得到一个MeshPart的所有顶点位置
而众所周知,MeshPart原本就有一个方法可以得到最小碰撞球,但是如果能够得到最小的轴向对齐的长方体就更好了。
于是用GetBoundingBox就可以了!!
类:201006272327122328.rar
public static List GetPositions(this ModelMesh mesh)
{
List positions = new List();
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{

// Get the mesh part's associated vertices.
Vector3[] vertices = new Vector3[meshPart.NumVertices];
mesh.VertexBuffer.GetData(
meshPart.StreamOffset + (meshPart.BaseVertex * meshPart.VertexStride),
vertices,
0,
meshPart.NumVertices,
meshPart.VertexStride);

//将顶点添加到集合
positions.AddRange(vertices);
}
return positions;

}
///

/// 得到Mesh的碰撞盒
///

/// ///
public static BoundingBox GetBoundingBox(this ModelMesh mesh)
{
List a = mesh.GetPositions();
if (a.Count > 0)
{
return BoundingBox.CreateFromPoints(a);
}
else return new BoundingBox();
}