• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1766
  • Last Modified:

Create an oriented bounding box from vertices

Hi there,

I'm doing this in XNA but it shouldn't be too different in DirectX
I'm getting the vertices of a box mesh from the vertexbuffer, now from those vertices I'd need to recreate that box as an oriented bounding box.
This is my code, in transformedvertices my vertices are stored in world space, a total of 24, now I'd need to be able to turn that into an oriented bounding box.
Anyone have any ideas?

Thanks in advance.
ModelMeshPart part = modelmesh.MeshParts[j];
                n = part.NumVertices;
 
                VertexPosition[] vertices = new VertexPosition[part.NumVertices];
 
                modelmesh.VertexBuffer.GetData<VertexPosition>(part.BaseVertex * part.VertexStride, vertices, 0, part.NumVertices, part.VertexStride);
 
                int t = MySkinnedModel.SkeletonBones.Count;
                string[] names = new string [t];
 
                for (int p = 0; p < t; p++)
                { 
                    names[p] = MySkinnedModel.SkeletonBones[p].Name.ToString();
                }
 
                Vector3[] transformedvertices = new Vector3[(part.NumVertices)];
 
                Matrix transformmatrix = MyAnimationController.SkinnedBoneTransforms[0];
 
                for (int i = 0; i < part.NumVertices; i++)
                {
                    transformedvertices[i] = Vector3.Transform(vertices[i].Position, transformmatrix);
                }

Open in new window

0
Snapples
Asked:
Snapples
  • 3
  • 2
1 Solution
 
ikeworkCommented:
hi Snapples,

this might be interesting for you:

http://codesuppository.blogspot.com/2006/06/best-fit-oriented-bounding-box.html

another technique is to compute a covariance-matrix of the point-cloud to compute the bounding box.

ike
0
 
SnapplesAuthor Commented:
Thanks for the link, I hadn't seen that one yet. Unfortunately it's of no use to me, I should have mentioned this. The bounding box surrounds part of an animated mesh, so the box has to be updated every frame. The code in your link is too performance heavy to run every single frame.
0
 
ikeworkCommented:
ok i see .. did you try the covariance-matrix yet?
0
 
SnapplesAuthor Commented:
I found the solution I needed.

In my OBB class, I have a global Vector3[24] array, in the constructor I fill it with the VertexBuffer of my mesh. I also have an Edge and a Quad struct, which has 2 and 4 short values in which I store the IndexBuffer values of the edges and faces. So basically storing every vertex, edge, face and quad with a minimum of data. Every frame I just have to transform the Vector3 array with the transformation matrix of the bone.
Then to check for collision I check if any of the edges of box1 collide with any faces of box2.

But thank you ike, I did get a lot of help from that first link you posted.
0
 
ikeworkCommented:
great to hear that .. good luck .. :)
0

Featured Post

NEW Veeam Backup for Microsoft Office 365 1.5

With Office 365, it’s your data and your responsibility to protect it. NEW Veeam Backup for Microsoft Office 365 eliminates the risk of losing access to your Office 365 data.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now