aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorTeravus Ovares2008-03-21 05:54:56 +0000
committerTeravus Ovares2008-03-21 05:54:56 +0000
commit0cb05c19529a110c996387bae8ba2047c3232851 (patch)
tree6c1b59a1ed51ff50629865b76146126b52c24c2f /OpenSim/Region
parent* Removed more encoding faults. (diff)
downloadopensim-SC-0cb05c19529a110c996387bae8ba2047c3232851.zip
opensim-SC-0cb05c19529a110c996387bae8ba2047c3232851.tar.gz
opensim-SC-0cb05c19529a110c996387bae8ba2047c3232851.tar.bz2
opensim-SC-0cb05c19529a110c996387bae8ba2047c3232851.tar.xz
* Updated ray tracing code. It's now good enough to use when the XYZ vector components of the scale have a difference of less then 4.5 meters.
* When a new prim is created and raytracing is called for, raytrace from the camera position to the ground in the direction of the Norm(RayEnd - RayStart). * If we got a hit based on our camera, create the new prim at the edge of the prim we hit. * Don't raytrace if the difference between any component of the vector exceeds 4.5meters.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs1
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs33
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs7
3 files changed, 40 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index 046332b..3ce7955 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using Axiom.Math;
30using libsecondlife; 31using libsecondlife;
31using libsecondlife.Packets; 32using libsecondlife.Packets;
32using OpenSim.Framework; 33using OpenSim.Framework;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 7948a6f..94a4e31 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -31,6 +31,7 @@ using System.Drawing;
31using System.Drawing.Imaging; 31using System.Drawing.Imaging;
32using System.Threading; 32using System.Threading;
33using System.Timers; 33using System.Timers;
34using Axiom.Math;
34using libsecondlife; 35using libsecondlife;
35using libsecondlife.Packets; 36using libsecondlife.Packets;
36using OpenJPEGNet; 37using OpenJPEGNet;
@@ -1079,7 +1080,37 @@ namespace OpenSim.Region.Environment.Scenes
1079 if (target != null) 1080 if (target != null)
1080 { 1081 {
1081 pos = target.AbsolutePosition; 1082 pos = target.AbsolutePosition;
1082 // TODO: Raytrace here 1083 //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString());
1084 //target.Scale.X
1085 if (Math.Abs(target.Scale.X - target.Scale.Y) > 4.5f
1086 || Math.Abs(target.Scale.Y - target.Scale.Z) > 4.5f
1087 || Math.Abs(target.Scale.Z - target.Scale.X) > 4.5f)
1088 {
1089
1090 // for now lets use the old method here as the new method works by using the largest scale vector
1091 // component as the radius of a sphere and produces wide results if there's a huge difference
1092 // between the x/y/z vector components
1093
1094 // If one scale component is less then .21m, it's likely being used as a thin block and therefore
1095 // the raytracing would produce a wide result.
1096
1097
1098 }
1099 else
1100 {
1101 // TODO: Raytrace better here
1102 LLVector3 direction = LLVector3.Norm(RayEnd - RayStart);
1103 Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z);
1104 Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z);
1105 EntityIntersection ei = m_innerScene.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection));
1106 //m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString());
1107
1108 if (ei.HitTF)
1109 {
1110 pos = new LLVector3(ei.ipoint.x, ei.ipoint.y, ei.ipoint.z);
1111 }
1112
1113 }
1083 return pos; 1114 return pos;
1084 } 1115 }
1085 else 1116 else
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index 67048bf..7fd1963 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -875,6 +875,13 @@ namespace OpenSim.Region.Environment.Scenes
875 if (vScale.z > radius) 875 if (vScale.z > radius)
876 radius = vScale.z; 876 radius = vScale.z;
877 877
878 // the second part of this is the default prim size
879 // once we factor in the aabb of the prim we're adding we can
880 // change this to;
881 // radius = (radius / 2) - 0.01f;
882 //
883 radius = (radius / 2) + (0.5f / 2) - 0.1f;
884
878 //radius = radius; 885 //radius = radius;
879 886
880 float itestPart3 = tmVal4.x + tmVal4.y + tmVal4.z + tmVal5.x + tmVal5.y + tmVal5.z - 887 float itestPart3 = tmVal4.x + tmVal4.y + tmVal4.z + tmVal5.x + tmVal5.y + tmVal5.z -