diff --git a/src/core/Projector.js b/src/core/Projector.js index dc7c18d5b13612e3a47bf42af0b243f794fbbab5..84cef91601c675a762d4af9293ee46ad5fdac903 100644 --- a/src/core/Projector.js +++ b/src/core/Projector.js @@ -40,7 +40,7 @@ THREE.Projector = function() { _projScreenMatrix.multiplyVector3( vector ); return vector; - + }; this.unprojectVector = function ( vector, camera ) { @@ -49,7 +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 - THREE.Camera + */ + this.pickingRay = function ( vector, camera ) { + + 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 ); + + // find direction from vector to end + end.subSelf( vector ).normalize(); + return new THREE.Ray( vector, end ); + }; this.projectObjects = function ( scene, camera, sort ) {