I made a simple box in 3Dstudio max and exported it with KW X-port plugin in .X format. Now I'm loading this mesh in my Direct3D project and calculating the bounding sphere of it like this:
m = Mesh.FromFile(My.Application.Info.DirectoryPath & "\Data\Models\Box.X", MeshFlags.Managed, DEV)
Using vb As VertexBuffer = m.VertexBuffer
Dim vertexData As GraphicsStream = vb.Lock(0, 0, LockFlags.None)
objectRadius = Geometry.ComputeBoundingSphere(vertexData, m.NumberVertices, m.VertexFormat, objectCenter)
vb.Unlock()
End Using
Now the problem is that I'm getting some weird results as center and radius:
The 3rd parameter should probably be the vertex stride, not the vertex format. I'm not sure how to get that in VB, but in C++ you'd call ID3DXBaseMesh::GetNumBytesPerVertex().
In Managed Direct3D there are 4 options to use this function. One of them is the one that I wrote above. When I changed it to what you said, like this:
objectRadius = Geometry.ComputeBoundingSphere(vertexData, m.NumberVertices, m.NumberBytesPerVertex, objectCenter)
everything worked great.
BUT, I found that only the meshes that are exported with KW X-port plugin from 3Ds max have this problem. PandaExporter plugin seems to work well with this but unfortunately it doesn't export tangets, so I can't use it.
Thanks for the help.