Sfoglia il codice sorgente

fixed build errors

i) now returning a Nullable<Vector3>
ii) no longer using axis string to reference origin and direction properties
horusscope 6 anni fa
parent
commit
51e4a4973e
1 ha cambiato i file con 16 aggiunte e 9 eliminazioni
  1. 16 9
      src/Culling/ray.ts

+ 16 - 9
src/Culling/ray.ts

@@ -249,16 +249,23 @@ export class Ray {
      * Calculate the intercept of a ray on a given axis
      * @param axis to check 'x' | 'y' | 'z'
      * @param offset from axis interception (i.e. an offset of 1y is intercepted above ground)
-     * @returns a vector containing the coordinates where 'axis' is equal to zero, or false if there is no intercept.
+     * @returns a vector containing the coordinates where 'axis' is equal to zero (else offset), or null if there is no intercept.
      */
-    public intersectsAxis(axis: string, offset: number = 0) {
-          var t = (this.origin[axis] - offset) / this.direction[axis]
-          if(t > 0) return false
-          switch(axis) {
-              case 'y': return new Vector3(this.origin.x + (this.direction.x * -t), offset, this.origin.z + (this.direction.z * -t))
-              case 'x': return new Vector3(offset, this.origin.y + (this.direction.y * -t), this.origin.z + (this.direction.z * -t))
-              case 'z': return new Vector3(this.origin.x + (this.direction.x * -t), this.origin.y + (this.direction.y * -t), offset)
-              default: return false
+    public intersectsAxis(axis: string, offset: number = 0): Nullable<Vector3> {
+          switch (axis) {
+              case 'y':
+		          var t = (this.origin.y - offset) / this.direction.y;
+		          if (t > 0) { return null; } // for example if the sky was clicked
+		          return new Vector3(this.origin.x + (this.direction.x * -t), offset, this.origin.z + (this.direction.z * -t));
+              case 'x':
+		          var t = (this.origin.x - offset) / this.direction.x;
+                  if (t > 0) { return null; }
+                  return new Vector3(offset, this.origin.y + (this.direction.y * -t), this.origin.z + (this.direction.z * -t));
+              case 'z':
+                  var t = (this.origin.z - offset) / this.direction.z;
+                  if (t > 0) { return null; }
+                  return new Vector3(this.origin.x + (this.direction.x * -t), this.origin.y + (this.direction.y * -t), offset);
+              default: return null;
           }
     }