BoxHelper.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.BoxHelper = function ( object ) {
  5. var geometry = new THREE.BufferGeometry();
  6. geometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( 72 ), 3 ) );
  7. THREE.LineSegments.call( this, geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
  8. if ( object !== undefined ) {
  9. this.update( object );
  10. }
  11. };
  12. THREE.BoxHelper.prototype = Object.create( THREE.LineSegments.prototype );
  13. THREE.BoxHelper.prototype.constructor = THREE.BoxHelper;
  14. THREE.BoxHelper.prototype.update = ( function () {
  15. var box = new THREE.Box3();
  16. return function ( object ) {
  17. box.setFromObject( object );
  18. var min = box.min;
  19. var max = box.max;
  20. /*
  21. 5____4
  22. 1/___0/|
  23. | 6__|_7
  24. 2/___3/
  25. 0: max.x, max.y, max.z
  26. 1: min.x, max.y, max.z
  27. 2: min.x, min.y, max.z
  28. 3: max.x, min.y, max.z
  29. 4: max.x, max.y, min.z
  30. 5: min.x, max.y, min.z
  31. 6: min.x, min.y, min.z
  32. 7: max.x, min.y, min.z
  33. */
  34. var vertices = this.geometry.attributes.position.array;
  35. vertices[ 0 ] = max.x; vertices[ 1 ] = max.y; vertices[ 2 ] = max.z;
  36. vertices[ 3 ] = min.x; vertices[ 4 ] = max.y; vertices[ 5 ] = max.z;
  37. vertices[ 6 ] = min.x; vertices[ 7 ] = max.y; vertices[ 8 ] = max.z;
  38. vertices[ 9 ] = min.x; vertices[ 10 ] = min.y; vertices[ 11 ] = max.z;
  39. vertices[ 12 ] = min.x; vertices[ 13 ] = min.y; vertices[ 14 ] = max.z;
  40. vertices[ 15 ] = max.x; vertices[ 16 ] = min.y; vertices[ 17 ] = max.z;
  41. vertices[ 18 ] = max.x; vertices[ 19 ] = min.y; vertices[ 20 ] = max.z;
  42. vertices[ 21 ] = max.x; vertices[ 22 ] = max.y; vertices[ 23 ] = max.z;
  43. //
  44. vertices[ 24 ] = max.x; vertices[ 25 ] = max.y; vertices[ 26 ] = min.z;
  45. vertices[ 27 ] = min.x; vertices[ 28 ] = max.y; vertices[ 29 ] = min.z;
  46. vertices[ 30 ] = min.x; vertices[ 31 ] = max.y; vertices[ 32 ] = min.z;
  47. vertices[ 33 ] = min.x; vertices[ 34 ] = min.y; vertices[ 35 ] = min.z;
  48. vertices[ 36 ] = min.x; vertices[ 37 ] = min.y; vertices[ 38 ] = min.z;
  49. vertices[ 39 ] = max.x; vertices[ 40 ] = min.y; vertices[ 41 ] = min.z;
  50. vertices[ 42 ] = max.x; vertices[ 43 ] = min.y; vertices[ 44 ] = min.z;
  51. vertices[ 45 ] = max.x; vertices[ 46 ] = max.y; vertices[ 47 ] = min.z;
  52. //
  53. vertices[ 48 ] = max.x; vertices[ 49 ] = max.y; vertices[ 50 ] = max.z;
  54. vertices[ 51 ] = max.x; vertices[ 52 ] = max.y; vertices[ 53 ] = min.z;
  55. vertices[ 54 ] = min.x; vertices[ 55 ] = max.y; vertices[ 56 ] = max.z;
  56. vertices[ 57 ] = min.x; vertices[ 58 ] = max.y; vertices[ 59 ] = min.z;
  57. vertices[ 60 ] = min.x; vertices[ 61 ] = min.y; vertices[ 62 ] = max.z;
  58. vertices[ 63 ] = min.x; vertices[ 64 ] = min.y; vertices[ 65 ] = min.z;
  59. vertices[ 66 ] = max.x; vertices[ 67 ] = min.y; vertices[ 68 ] = max.z;
  60. vertices[ 69 ] = max.x; vertices[ 70 ] = min.y; vertices[ 71 ] = min.z;
  61. this.geometry.attributes.position.needsUpdate = true;
  62. this.geometry.computeBoundingSphere();
  63. }
  64. } )();
粤ICP备19079148号