From bc27e18424abe3e5fe24a0d4701806b5cf4fc9a0 Mon Sep 17 00:00:00 2001 From: Justin Sermeno Date: Wed, 5 Oct 2011 00:31:52 -0700 Subject: [PATCH] add pickingRay method --- src/core/Projector.js | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/src/core/Projector.js b/src/core/Projector.js index b3e5dce4..d4dabf5f 100644 --- a/src/core/Projector.js +++ b/src/core/Projector.js @@ -36,39 +36,34 @@ THREE.Projector = function() { this.projectVector = function ( vector, camera ) { - _projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse ); + _projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse ); _projScreenMatrix.multiplyVector3( vector ); return vector; }; - this.unprojectVector = function ( vector, camera, ray ) { - var end, dir, t; - - //if ( camera instanceof THREE.OrthographicCamera ) { - - vector.z = -1.0; - end = new THREE.Vector3( vector.x, vector.y, 1.0); - - //} + this.unprojectVector = function ( vector, camera ) { _projScreenMatrix.multiply( camera.matrixWorld, THREE.Matrix4.makeInvert( camera.projectionMatrix ) ); _projScreenMatrix.multiplyVector3( vector ); - // if ( camera instanceof THREE.OrthographicCamera ) { - - _projScreenMatrix.multiplyVector3( end ); - - dir = new THREE.Vector3(); - dir.sub( end, vector ); - dir.normalize(); - - ray.origin = vector; - ray.direction = dir; - // } - return vector; + }; + this.pickingRay = function ( vector, camera ) { + var end, dir, ray, t; + + 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(); + + return new THREE.Ray( vector, dir ); }; this.projectObjects = function ( scene, camera, sort ) {