From 3b60963c646ba87e059c1acc5e33a954629773c1 Mon Sep 17 00:00:00 2001 From: Justin Sermeno Date: Wed, 5 Oct 2011 00:43:07 -0700 Subject: [PATCH] pickingRay optimizations and comments --- src/core/Projector.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/core/Projector.js b/src/core/Projector.js index d4dabf5f..158d6f32 100644 --- a/src/core/Projector.js +++ b/src/core/Projector.js @@ -35,11 +35,12 @@ THREE.Projector = function() { this.projectVector = function ( vector, camera ) { - + _projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse ); _projScreenMatrix.multiplyVector3( vector ); return vector; + }; this.unprojectVector = function ( vector, camera ) { @@ -48,22 +49,31 @@ THREE.Projector = function() { _projScreenMatrix.multiplyVector3( vector ); return vector; + }; + /** + * Translates a 2D point from NDC to a THREE.Ray + * that can be used for picking. + * @vector - THREE.Vector3 that represents 2D point + * @camera - camera + */ this.pickingRay = function ( vector, camera ) { - var end, dir, ray, t; + var end, ray, t; + + // set two vectors with opposing z values vector.z = -1.0; end = new THREE.Vector3( vector.x, vector.y, 1.0 ); this.unprojectVector( vector, camera ); this.unprojectVector( end, camera ); - dir = new THREE.Vector3(); - dir.sub( end, vector ); - dir.normalize(); + // find direction from vector to end + end.subSelf( vector ).normalize(); - return new THREE.Ray( vector, dir ); + return new THREE.Ray( vector, end ); + }; this.projectObjects = function ( scene, camera, sort ) {