法線が異なるため、同じ位置の頂点を受け取ることができますが、サイズだけを知りたい場合は問題ありません。
ModelMeshPart 頂点バッファからサイズを取得するには、次のようにします。
public void UpdateFrom( ModelMeshPart meshPart ) {
var indices = new short[meshPart.IndexBuffer.IndexCount];
meshPart.IndexBuffer.GetData<short>( indices );
var vertices = new float[meshPart.VertexBuffer.VertexCount
* meshPart.VertexBuffer.VertexDeclaration.VertexStride/4];
meshPart.VertexBuffer.GetData<float>( vertices );
// Usually first three floats are position,
// this way don't need to know what vertex struct is used
for ( int i=meshPart.StartIndex; i<meshPart.StartIndex + meshPart.PrimitiveCount*3; i++ ) {
int index = (meshPart.VertexOffset + indices[i]) *
meshPart.VertexBuffer.VertexDeclaration.VertexStride/4;
position = new Vector3(vertices[index] , vertices[index+1], vertices[index+2]));
UpdateFrom(position);
}
}
public void UpdateFrom(Vector3 point) {
if (point.X > box.Max.X) box.Max.X = point.X;
if (point.X < box.Min.X) box.Min.X = point.X;
....
}
また、winforms サンプル内でカスタム プロセッサを使用することもできます。contentbuilder に参照を追加するだけで済みます... トリックは dll 自体を参照することです...
static string[] pipelineAssemblies =
{
"Microsoft.Xna.Framework.Content.Pipeline.FBXImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.XImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.TextureImporter" + xnaVersion,
"Microsoft.Xna.Framework.Content.Pipeline.EffectImporter" + xnaVersion,
Application.StartupPath + "\\SkinnedModelPipeline.dll" ,
Application.StartupPath + "\\AnimationPipeline.dll" ,
....