Welcome, Guest! Log In | Create Account

Changeset 1905

Show
Ignore:
Timestamp:
11/18/09 20:21:05 (3 months ago)
Author:
bostich1983
Message:

- small fix on Utility.Intersect

Location:
branches/ogre_1.7_update/Projects
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/ogre_1.7_update/Projects/Axiom/Engine/Math/Utility.cs

    r1903 r1905  
    11731173        /// <param name="d2"></param> 
    11741174        /// <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) 
    11761176        { 
    11771177            if (box.IsNull) 
    1178                 return false; 
     1178                return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 
    11791179 
    11801180            if (box.IsInfinite) 
    11811181            { 
    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); 
    11851183            } 
    11861184 
     
    12171215 
    12181216            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); 
    12201218 
    12211219            if (absDir[imid] < Real.Epsilon) 
     
    12241222                if (rayorig[imid] < min[imid] || rayorig[imid] > max[imid] || 
    12251223                    rayorig[imin] < min[imin] || rayorig[imin] > max[imin]) 
    1226                     return false; 
     1224                    return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 
    12271225            } 
    12281226            else 
    12291227            { 
    12301228                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); 
    12321230 
    12331231                if (absDir[imin] < Real.Epsilon) 
     
    12351233                    // Parallel with minimise axis, check bounds only 
    12361234                    if (rayorig[imin] < min[imin] || rayorig[imin] > max[imin]) 
    1237                         return false; 
     1235                        return new Tuple<bool, Real, Real>(false, Real.NaN, Real.NaN); 
    12381236                } 
    12391237                else 
    12401238                { 
    12411239                    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 
    12521246            , ref Real end, ref Real start) 
    12531247        { 
  • branches/ogre_1.7_update/Projects/Components/Terrain/Terrain.cs

    r1902 r1905  
    52955295            localRay.Origin = localRay.GetPoint(-mWorldSize / mSize * 0.5f); 
    52965296            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; 
    52995302                // discard out of range 
    53005303                if (dFar <= 0 || (distanceLimit != 0 && dFar > distanceLimit))