Raycaster.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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.precision = 0.0001;
  34. THREE.Raycaster.prototype.linePrecision = 1;
  35. THREE.Raycaster.prototype.set = function ( origin, direction ) {
  36. this.ray.set( origin, direction );
  37. // direction is assumed to be normalized (for accurate distance calculations)
  38. };
  39. THREE.Raycaster.prototype.intersectObject = function ( object, recursive ) {
  40. var intersects = [];
  41. intersectObject( object, this, intersects, recursive );
  42. intersects.sort( descSort );
  43. return intersects;
  44. };
  45. THREE.Raycaster.prototype.intersectObjects = function ( objects, recursive ) {
  46. var intersects = [];
  47. for ( var i = 0, l = objects.length; i < l; i ++ ) {
  48. intersectObject( objects[ i ], this, intersects, recursive );
  49. }
  50. intersects.sort( descSort );
  51. return intersects;
  52. };
  53. }( THREE ) );
粤ICP备19079148号