UNPKG

three.fbo-helper

Version:

FrameBuffer Object inspector for three.js

112 lines (64 loc) 2.48 kB
import { LineSegments } from '../../objects/LineSegments'; import { Matrix4 } from '../../math/Matrix4'; import { VertexColors } from '../../constants'; import { LineBasicMaterial } from '../../materials/LineBasicMaterial'; import { Color } from '../../math/Color'; import { Vector3 } from '../../math/Vector3'; import { Geometry } from '../../core/Geometry'; /** * @author Sean Griffin / http://twitter.com/sgrif * @author Michael Guerrero / http://realitymeltdown.com * @author mrdoob / http://mrdoob.com/ * @author ikerr / http://verold.com */ function SkeletonHelper( object ) { this.bones = this.getBoneList( object ); var geometry = new Geometry(); for ( var i = 0; i < this.bones.length; i ++ ) { var bone = this.bones[ i ]; if ( (bone.parent && bone.parent.isBone) ) { geometry.vertices.push( new Vector3() ); geometry.vertices.push( new Vector3() ); geometry.colors.push( new Color( 0, 0, 1 ) ); geometry.colors.push( new Color( 0, 1, 0 ) ); } } geometry.dynamic = true; var material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } ); LineSegments.call( this, geometry, material ); this.root = object; this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; this.update(); } SkeletonHelper.prototype = Object.create( LineSegments.prototype ); SkeletonHelper.prototype.constructor = SkeletonHelper; SkeletonHelper.prototype.getBoneList = function( object ) { var boneList = []; if ( (object && object.isBone) ) { boneList.push( object ); } for ( var i = 0; i < object.children.length; i ++ ) { boneList.push.apply( boneList, this.getBoneList( object.children[ i ] ) ); } return boneList; }; SkeletonHelper.prototype.update = function () { var geometry = this.geometry; var matrixWorldInv = new Matrix4().getInverse( this.root.matrixWorld ); var boneMatrix = new Matrix4(); var j = 0; for ( var i = 0; i < this.bones.length; i ++ ) { var bone = this.bones[ i ]; if ( (bone.parent && bone.parent.isBone) ) { boneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld ); geometry.vertices[ j ].setFromMatrixPosition( boneMatrix ); boneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld ); geometry.vertices[ j + 1 ].setFromMatrixPosition( boneMatrix ); j += 2; } } geometry.verticesNeedUpdate = true; geometry.computeBoundingSphere(); }; export { SkeletonHelper };