Ray Vs OBB problem!

This topic is 2646 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

Recommended Posts

I wrote a custom content pipeline that will set a molde.tag value with List<List<Triangle>> (inner list will keep all triangles of each mesh of model and outer list will keep all meshes triangles list) triangles coordinate are in absolute form without any scales or rotations or translates .when I load a model its will set model.tag properties and create an OBB for each mesh by its triangles this is my OBB class:

 public OBB(Triangle[] Triangles, Matrix AbsoluteBoneTransform) { Abs = AbsoluteBoneTransform; IncludingTriangles = Triangles; List<Vector3> Vertices = new List<Vector3>(0); for (int i = 0; i < Triangles.Length; i++) { if (!Vertices.Contains(IncludingTriangles.FirstVertex)) { Vertices.Add(IncludingTriangles.FirstVertex); } if (!Vertices.Contains(IncludingTriangles.SecondVertex)) { Vertices.Add(IncludingTriangles.SecondVertex); } if (!Vertices.Contains(IncludingTriangles.ThirdVertex)) { Vertices.Add(IncludingTriangles.ThirdVertex); } } float MaxX = float.MinValue; float MaxY = float.MinValue; float MaxZ = float.MinValue; float MinX = float.MaxValue; float MinY = float.MaxValue; float MinZ = float.MaxValue; this.Corners = Vertices.ToArray(); foreach (Vector3 v in this.Corners) { if (v.X < MinX) MinX = v.X; if (v.Y < MinY) MinY = v.Y; if (v.Z < MinZ) MinZ = v.Z; if (v.X > MaxX) MaxX = v.X; if (v.Y > MaxY) MaxY = v.Y; if (v.Z > MaxZ) MaxZ = v.Z; } this.Max = new Vector3(MaxX, MaxY, MaxZ); this.Min = new Vector3(MinX, MinY, MinZ); this.Center = (Min + Max) * 0.5f; this.Extents = (Max - Min) * 0.5f; this.GetLoacalCoordinates(AbsoluteBoneTransform); } public void GetLoacalCoordinates(Matrix Abs) { Vector3 Translation; Quaternion Rotation; Vector3 Scale; Abs.Decompose(out Scale, out Rotation, out Translation); LocalXAxis = Vector3.Transform(Vector3.Right, Rotation); LocalZAxis = Vector3.Transform(Vector3.Forward, Rotation); LocalYAxis = Vector3.Transform(Vector3.Up, Rotation); LocalXAxis.Normalize(); LocalZAxis.Normalize(); LocalYAxis.Normalize(); U = new Vector3[] { LocalXAxis, LocalYAxis, LocalZAxis }; E = new float[] { this.Extents.X, this.Extents.Y, this.Extents.Z }; } 
So in this class I have three values Center , Extends and U[0..2] and corners for drawing purposes so I’m trying to write Ray Vs OBB test.
 Class OBB { Vector3 U[3]; // Local x-, y-, and z-axes Vector3 E; // Positive halfwidth extents of OBB along each axis Vector3 Center; ] // OBB center point Vector3 Corners[8]; //will store all 8 corners of OBB } 
This is my problem how can I do that?I think I must use Inverse of U vectors for orientation of Ray.Direction but I don’t know how can I test this new ray with my obb!!!
I m using XNA 3.1 and C#.
any codes or idea.
Thanks a lot.
Saeed.

1. 1
2. 2
3. 3
Rutin
23
4. 4
5. 5
khawk
14

• 9
• 11
• 11
• 23
• 12
• Forum Statistics

• Total Topics
633653
• Total Posts
3013166
×