从Microsoft.Xna.Framework.Graphics.Model中抓取顶点和索引?

时间:2010-12-21 18:58:06

标签: windows-phone-7 xna mesh

是否可以从XNA模型对象中获取索引/顶点?我想处理几何以进行碰撞检测。

1 个答案:

答案 0 :(得分:1)

我最近在为XNA模型绘制边界框时编写了blog post,并且源包含了一个VertexElementExtractor类,它应该完全符合您的要求。由于它很短,我将在这里包含代码:

public static class VertexElementExtractor
{
    public static Vector3[] GetVertexElement(ModelMeshPart meshPart, VertexElementUsage usage)
    {
        VertexDeclaration vd = meshPart.VertexBuffer.VertexDeclaration;
        VertexElement[] elements = vd.GetVertexElements();

        Func<VertexElement, bool> elementPredicate = ve => ve.VertexElementUsage == usage && ve.VertexElementFormat == VertexElementFormat.Vector3;
        if (!elements.Any(elementPredicate))
            return null;

        VertexElement element = elements.First(elementPredicate);

        Vector3[] vertexData = new Vector3[meshPart.NumVertices];
        meshPart.VertexBuffer.GetData((meshPart.VertexOffset * vd.VertexStride) + element.Offset,
            vertexData, 0, vertexData.Length, vd.VertexStride);

        return vertexData;
    }
}

但是,如果可能,我建议使用XNA内容管道在构建时提取顶点。 App Hub上的Picking with Triangle Accuracy示例执行此操作。