SkeletonHelper.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * @author Sean Griffin / http://twitter.com/sgrif
  3. * @author Michael Guerrero / http://realitymeltdown.com
  4. * @author mrdoob / http://mrdoob.com/
  5. */
  6. THREE.SkeletonHelper = function ( object ) {
  7. var skeleton = object.skeleton;
  8. var geometry = new THREE.Geometry();
  9. for ( var i = 0; i < skeleton.bones.length; i ++ ) {
  10. var bone = skeleton.bones[ i ];
  11. if ( bone.parent instanceof THREE.Bone ) {
  12. geometry.vertices.push( new THREE.Vector3() );
  13. geometry.vertices.push( new THREE.Vector3() );
  14. geometry.colors.push( new THREE.Color( 0, 0, 1 ) );
  15. geometry.colors.push( new THREE.Color( 0, 1, 0 ) );
  16. }
  17. }
  18. var material = new THREE.LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, transparent: true } );
  19. THREE.Line.call( this, geometry, material, THREE.LinePieces );
  20. this.skeleton = skeleton;
  21. this.matrixWorld = object.matrixWorld;
  22. this.matrixAutoUpdate = false;
  23. this.update();
  24. };
  25. THREE.SkeletonHelper.prototype = Object.create( THREE.Line.prototype );
  26. THREE.SkeletonHelper.prototype.update = function () {
  27. var geometry = this.geometry;
  28. var j = 0;
  29. for ( var i = 0; i < this.skeleton.bones.length; i ++ ) {
  30. var bone = this.skeleton.bones[ i ];
  31. if ( bone.parent instanceof THREE.Bone ) {
  32. geometry.vertices[ j ].setFromMatrixPosition( bone.skinMatrix );
  33. geometry.vertices[ j + 1 ].setFromMatrixPosition( bone.parent.skinMatrix );
  34. j += 2;
  35. }
  36. }
  37. geometry.verticesNeedUpdate = true;
  38. geometry.computeBoundingSphere();
  39. };