title: Three.js raycasting collision not working
body: <p>I am working on an arcade style Everest Flight Simulator.</p>
  
  <p>In my debugger where I am building this, I have a terrain and helicopter class which generate the BufferGeometry terrain mesh, the Groups for the helipad Geometries, and the group for the helicopter Camera and Geometry. </p>
  
  <p>My issue is that currently I can't seem to get any collision to detect. I imagine it may not support BufferGeometries so that is an issue for me because I need the terrain to be a Buffer since it's far too expansive... as a standard geometry it causes a memory crash in the browser. </p>
  
  <p>However, testing the helipad geometries alone it still does not trigger. They are in a group so I add the groups to a global window array and set the collision check to be recursive but to no avail.</p>
  
  <p>Ultimately, I am open to other forms of collision detection and may need two types as I <em>have</em> to use buffer geometries. Any ideas on how to fix this or a better solution?</p>
  
  <p><strong>The Helicopter Object Itself</strong></p>
  
  <pre><code>// Rect to Simulate Helicopter
  const geometry = new THREE.BoxGeometry( 2, 1, 4 ),
        material = new THREE.MeshBasicMaterial(),
        rect = new THREE.Mesh( geometry, material );
  
  rect.position.x = 0;
  rect.position.y = terrain.returnCameraStartPosY();
  rect.position.z = 0;
  rect.rotation.order = "YXZ";
  rect.name = "heli";
  
  // Link Camera and Helicopter
  const heliCam = new THREE.Group(),
        player = new Helicopter(heliCam, "OH-58 Kiowa", 14000);
  
  heliCam.add(camera);
  heliCam.add(rect);
  heliCam.position.set( 0, 2040, -2000 );
  heliCam.name = "heliCam";
  scene.add(heliCam);
  </code></pre>
  
  <p><strong>Adding Objects to Global Collision Array</strong></p>
  
  <pre><code>// Add Terrain
  const terrain = new Terrain.ProceduralTerrain(),
        terrainObj = terrain.returnTerrainObj(),
        helipadEnd = new Terrain.Helipad( 0, 1200, -3600, "Finish", true ),
        helipadStart = new Terrain.Helipad( 0, 2000, -2000, "Start", false ),
        helipadObjStart = helipadStart.returnHelipadObj(),
        helipadObjEnd = helipadEnd.returnHelipadObj();
  
  window.collidableMeshList.push(terrainObj);
  window.collidableMeshList.push(helipadObjStart);
  window.collidableMeshList.push(helipadObjEnd);
  </code></pre>
  
  <p><strong>Collision Detection Function Run Every Frame</strong></p>
  
  <pre><code>collisionDetection(){
      const playerOrigin = this.heli.children[1].clone(); // Get Box Mesh from Player Group
  
      for (let i = playerOrigin.geometry.vertices.length - 1; i &gt;= 0; i--) {
          const localVertex      = playerOrigin.geometry.vertices[i].clone(),
                globalVertex     = localVertex.applyMatrix4( playerOrigin.matrix ),
                directionVector  = globalVertex.sub( playerOrigin.position ),
                ray              = new THREE.Raycaster( playerOrigin, directionVector.clone().normalize() ),
                collisionResults = ray.intersectObjects( window.collidableMeshList, true ); // Recursive Boolean for children
  
          if ( collisionResults.length &gt; 0 ){
              this.landed = true;
              console.log("Collision");
          }
  
          // if ( collisionResults.length &gt; 0 &amp;&amp; collisionResults[0].distance &lt; directionVector.length() ){
          //  this.landed = true;
          //  console.log("Collision with vectorLength")
          // }    
      }
  }
  </code></pre>