aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs23
1 files changed, 17 insertions, 6 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 18cae48..3dbd809 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -1060,7 +1060,7 @@ namespace OpenSim.Region.Environment.Scenes
1060 return Math.Sqrt(dx * dx + dy * dy + dz * dz); 1060 return Math.Sqrt(dx * dx + dy * dy + dz * dz);
1061 } 1061 }
1062 1062
1063 public EntityIntersection TestIntersectionOBB(Ray iray, Quaternion parentrot, bool FrontFacesOnly) 1063 public EntityIntersection TestIntersectionOBB(Ray iray, Quaternion parentrot, bool frontFacesOnly, bool faceCenters)
1064 { 1064 {
1065 // In this case we're using a rectangular prism, which has 6 faces and therefore 6 planes 1065 // In this case we're using a rectangular prism, which has 6 faces and therefore 6 planes
1066 // This breaks down into the ray---> plane equation. 1066 // This breaks down into the ray---> plane equation.
@@ -1339,14 +1339,25 @@ namespace OpenSim.Region.Environment.Scenes
1339 continue; 1339 continue;
1340 1340
1341 // If the normal is pointing outside the object 1341 // If the normal is pointing outside the object
1342 if (iray.Direction.Dot(normals[i]) < 0 || !FrontFacesOnly) 1342 if (iray.Direction.Dot(normals[i]) < 0 || !frontFacesOnly)
1343 { 1343 {
1344
1345 q = iray.Origin + a * iray.Direction;
1346 1344
1347 // Is this the closest hit to the object's origin? 1345 if (faceCenters)
1348 //float distance2 = (float)GetDistanceTo(q, iray.Origin); 1346 {
1347 q = AXpos + a * AAfacenormals[i]; //(FaceA[i] + FaceB[i] + FaceC[1] + FaceD[i]) / 4f;
1348 }
1349 else
1350 {
1351 q = iray.Origin + a * iray.Direction;
1352 }
1353
1349 float distance2 = (float)GetDistanceTo(q, AXpos); 1354 float distance2 = (float)GetDistanceTo(q, AXpos);
1355 // Is this the closest hit to the object's origin?
1356 if (faceCenters)
1357 {
1358 distance2 = (float)GetDistanceTo(q, iray.Origin);
1359 }
1360
1350 1361
1351 if (distance2 < returnresult.distance) 1362 if (distance2 < returnresult.distance)
1352 { 1363 {