2010-12-21 83 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示例執行此操作。