0
是否可以從XNA模型對象中獲取索引/頂點?我想處理碰撞檢測的幾何。從Microsoft.Xna.Framework.Graphics.Model獲取頂點和索引?
是否可以從XNA模型對象中獲取索引/頂點?我想處理碰撞檢測的幾何。從Microsoft.Xna.Framework.Graphics.Model獲取頂點和索引?
我最近寫了一個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示例執行此操作。