Changeset 1905
- Timestamp:
- 11/18/09 20:21:05 (3 months ago)
- Location:
- branches/ogre_1.7_update/Projects
- Files:
-
- 2 modified
-
Axiom/Engine/Math/Utility.cs (modified) (4 diffs)
-
Components/Terrain/Terrain.cs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/ogre_1.7_update/Projects/Axiom/Engine/Math/Utility.cs
r1903 r1905 1173 1173 /// <param name="d2"></param> 1174 1174 /// <returns></returns> 1175 public static bool Intersects(Ray ray, AxisAlignedBox box, ref Real d1, ref Real d2)1175 public static Tuple<bool,Real,Real> Intersect(Ray ray, AxisAlignedBox box) 1176 1176 { 1177 1177 if (box.IsNull) 1178 return false;1178 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1179 1179 1180 1180 if (box.IsInfinite) 1181 1181 { 1182 if (d1 != 0) d1 = 0; 1183 if (d2 != 0) d2 = Real.PositiveInfinity; 1184 return true; 1182 return new Tuple<bool, Real, Real>(true, Real.NaN, Real.PositiveInfinity); 1185 1183 } 1186 1184 … … 1217 1215 1218 1216 if (!CalcAxis(imax, rayDir, rayorig, min, max, ref end, ref start)) 1219 return false;1217 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1220 1218 1221 1219 if (absDir[imid] < Real.Epsilon) … … 1224 1222 if (rayorig[imid] < min[imid] || rayorig[imid] > max[imid] || 1225 1223 rayorig[imin] < min[imin] || rayorig[imin] > max[imin]) 1226 return false;1224 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1227 1225 } 1228 1226 else 1229 1227 { 1230 1228 if (!CalcAxis(imid, rayDir, rayorig, min, max, ref end, ref start)) 1231 return false;1229 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1232 1230 1233 1231 if (absDir[imin] < Real.Epsilon) … … 1235 1233 // Parallel with minimise axis, check bounds only 1236 1234 if (rayorig[imin] < min[imin] || rayorig[imin] > max[imin]) 1237 return false;1235 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1238 1236 } 1239 1237 else 1240 1238 { 1241 1239 if (!CalcAxis(imin, rayDir, rayorig, min, max, ref end, ref start)) 1242 return false; 1243 } 1244 } 1245 1246 if (d1 != 0) d1 = start; 1247 if (d2 != 0) d2 = end; 1248 1249 return true; 1250 } 1251 static bool CalcAxis(int i, Vector3 raydir, Vector3 rayorig, Vector3 min, Vector3 max 1240 return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 1241 } 1242 } 1243 return new Tuple<bool, Real, Real>(true, start, end); 1244 } 1245 private static bool CalcAxis(int i, Vector3 raydir, Vector3 rayorig, Vector3 min, Vector3 max 1252 1246 , ref Real end, ref Real start) 1253 1247 { -
branches/ogre_1.7_update/Projects/Components/Terrain/Terrain.cs
r1902 r1905 5295 5295 localRay.Origin = localRay.GetPoint(-mWorldSize / mSize * 0.5f); 5296 5296 IntersectResult res = new IntersectResult(); 5297 if (Utility.Intersects(localRay, AABB, ref dNear, ref dFar)) 5298 { 5297 Tuple<bool, Real, Real> intersects = Utility.Intersect(localRay, AABB); 5298 if (intersects.First) 5299 { 5300 dNear = intersects.Second; 5301 dFar = intersects.Third; 5299 5302 // discard out of range 5300 5303 if (dFar <= 0 || (distanceLimit != 0 && dFar > distanceLimit))
