Raycaster.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. * @author bhouston / http://exocortex.com/
  4. * @author stephomi / http://stephaneginier.com/
  5. */
  6. ( function ( THREE ) {
  7. THREE.Raycaster = function ( origin, direction, near, far ) {
  8. this.ray = new THREE.Ray( origin, direction );
  9. // direction is assumed to be normalized (for accurate distance calculations)
  10. this.near = near || 0;
  11. this.far = far || Infinity;
  12. this.params = {
  13. Sprite: {},
  14. Mesh: {},
  15. PointCloud: { threshold: 1 },
  16. LOD: {},
  17. Line: {}
  18. };
  19. };
  20. var descSort = function ( a, b ) {
  21. return a.distance - b.distance;
  22. };
  23. var intersectObject = function ( object, raycaster, intersects, recursive ) {
  24. object.raycast( raycaster, intersects );
  25. if ( recursive === true ) {
  26. var children = object.children;
  27. for ( var i = 0, l = children.length; i < l; i ++ ) {
  28. intersectObject( children[ i ], raycaster, intersects, true );
  29. }
  30. }
  31. };
  32. //
  33. THREE.Raycaster.prototype = {
  34. constructor: THREE.Raycaster,
  35. precision: 0.0001,
  36. linePrecision: 1,
  37. set: function ( origin, direction ) {
  38. this.ray.set( origin, direction );
  39. // direction is assumed to be normalized (for accurate distance calculations)
  40. },
  41. intersectObject: function ( object, recursive ) {
  42. var intersects = [];
  43. intersectObject( object, this, intersects, recursive );
  44. intersects.sort( descSort );
  45. return intersects;
  46. },
  47. intersectObjects: function ( objects, recursive ) {
  48. var intersects = [];
  49. for ( var i = 0, l = objects.length; i < l; i ++ ) {
  50. intersectObject( objects[ i ], this, intersects, recursive );
  51. }
  52. intersects.sort( descSort );
  53. return intersects;
  54. }
  55. };
  56. }( THREE ) );