2010-12-21 26 views

回答

1

我最近写了一个blog post来绘制XNA模型的边界框,并且源文件包括一个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示例执行此操作。