瀏覽代碼

Ray.Transform and Ray.TransformToRef now adjust length of ray after normalizing direction

Adam Bowman 8 年之前
父節點
當前提交
866b067812
共有 1 個文件被更改,包括 14 次插入4 次删除
  1. 14 4
      src/Culling/babylon.ray.ts

+ 14 - 4
src/Culling/babylon.ray.ts

@@ -387,17 +387,27 @@
         }
 
         public static Transform(ray: Ray, matrix: Matrix): Ray {
-            var newOrigin = Vector3.TransformCoordinates(ray.origin, matrix);
-            var newDirection = Vector3.TransformNormal(ray.direction, matrix);
+            var result = new Ray(new Vector3(0,0,0), new Vector3(0,0,0));
+            Ray.TransformToRef(ray, matrix, result);
             
-            return new Ray(newOrigin, newDirection, ray.length);
+            return result;
         }
 
         public static TransformToRef(ray: Ray, matrix: Matrix, result:Ray): void {
-            
             Vector3.TransformCoordinatesToRef(ray.origin, matrix, result.origin);
             Vector3.TransformNormalToRef(ray.direction, matrix, result.direction);
+            result.length = ray.length;
             
+            var dir = result.direction;
+            var len = dir.length();
+
+            if(!(len === 0 || len === 1)){
+                var num = 1.0 / len;
+                dir.x *= num;
+                dir.y *= num;
+                dir.z *= num;
+                result.length *= len;
+            }
         }
     }
 }