|
@@ -0,0 +1,96 @@
|
|
|
+/**
|
|
|
+ * @author mrdoob / http://mrdoob.com/
|
|
|
+ * @author WestLangley / http://github.com/WestLangley
|
|
|
+*/
|
|
|
+
|
|
|
+THREE.VertexTangentsHelper = function ( object, size, hex, linewidth ) {
|
|
|
+
|
|
|
+ this.object = object;
|
|
|
+
|
|
|
+ this.size = size || 1;
|
|
|
+
|
|
|
+ var color = hex || 0x0000ff;
|
|
|
+
|
|
|
+ var width = linewidth || 1;
|
|
|
+
|
|
|
+ var geometry = new THREE.Geometry();
|
|
|
+
|
|
|
+ var vertices = object.geometry.vertices;
|
|
|
+
|
|
|
+ var faces = object.geometry.faces;
|
|
|
+
|
|
|
+ for ( var i = 0, l = faces.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ var face = faces[ i ];
|
|
|
+
|
|
|
+ for ( var j = 0, jl = face.vertexTangents.length; j < jl; j ++ ) {
|
|
|
+
|
|
|
+ geometry.vertices.push( new THREE.Vector3() );
|
|
|
+ geometry.vertices.push( new THREE.Vector3() );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces );
|
|
|
+
|
|
|
+ this.matrixAutoUpdate = false;
|
|
|
+
|
|
|
+ this.update();
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+THREE.VertexTangentsHelper.prototype = Object.create( THREE.Line.prototype );
|
|
|
+
|
|
|
+THREE.VertexTangentsHelper.prototype.update = ( function ( object ) {
|
|
|
+
|
|
|
+ var v1 = new THREE.Vector3();
|
|
|
+
|
|
|
+ return function( object ) {
|
|
|
+
|
|
|
+ var keys = [ 'a', 'b', 'c', 'd' ];
|
|
|
+
|
|
|
+ this.object.updateMatrixWorld( true );
|
|
|
+
|
|
|
+ var vertices = this.geometry.vertices;
|
|
|
+
|
|
|
+ var verts = this.object.geometry.vertices;
|
|
|
+
|
|
|
+ var faces = this.object.geometry.faces;
|
|
|
+
|
|
|
+ var worldMatrix = this.object.matrixWorld;
|
|
|
+
|
|
|
+ var idx = 0;
|
|
|
+
|
|
|
+ for ( var i = 0, l = faces.length; i < l; i ++ ) {
|
|
|
+
|
|
|
+ var face = faces[ i ];
|
|
|
+
|
|
|
+ for ( var j = 0, jl = face.vertexTangents.length; j < jl; j ++ ) {
|
|
|
+
|
|
|
+ var vertexId = face[ keys[ j ] ];
|
|
|
+ var vertex = verts[ vertexId ];
|
|
|
+
|
|
|
+ var tangent = face.vertexTangents[ j ];
|
|
|
+
|
|
|
+ vertices[ idx ].copy( vertex ).applyMatrix4( worldMatrix );
|
|
|
+
|
|
|
+ v1.copy( tangent ).transformDirection( worldMatrix ).multiplyScalar( this.size );
|
|
|
+
|
|
|
+ v1.add( vertices[ idx ] );
|
|
|
+ idx = idx + 1;
|
|
|
+
|
|
|
+ vertices[ idx ].copy( v1 );
|
|
|
+ idx = idx + 1;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ this.geometry.verticesNeedUpdate = true;
|
|
|
+
|
|
|
+ return this;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}());
|