|
@@ -25,31 +25,29 @@ THREE.TorusKnotGeometry = function ( radius, tube, radialSegments, tubularSegmen
|
|
|
for ( var i = 0; i < this.radialSegments; ++ i ) {
|
|
|
|
|
|
this.grid[ i ] = new Array( this.tubularSegments );
|
|
|
+ var u = i / this.radialSegments * 2 * this.p * Math.PI;
|
|
|
+ var p1 = getPos( u, this.q, this.p, this.radius, this.heightScale );
|
|
|
+ var p2 = getPos( u + 0.01, this.q, this.p, this.radius, this.heightScale );
|
|
|
+ tang.subVectors( p2, p1 );
|
|
|
+ n.addVectors( p2, p1 );
|
|
|
+
|
|
|
+ bitan.crossVectors( tang, n );
|
|
|
+ n.crossVectors( bitan, tang );
|
|
|
+ bitan.normalize();
|
|
|
+ n.normalize();
|
|
|
|
|
|
for ( var j = 0; j < this.tubularSegments; ++ j ) {
|
|
|
|
|
|
- var u = i / this.radialSegments * 2 * this.p * Math.PI;
|
|
|
var v = j / this.tubularSegments * 2 * Math.PI;
|
|
|
- var p1 = getPos( u, v, this.q, this.p, this.radius, this.heightScale );
|
|
|
- var p2 = getPos( u + 0.01, v, this.q, this.p, this.radius, this.heightScale );
|
|
|
- var cx, cy;
|
|
|
-
|
|
|
- tang.subVectors( p2, p1 );
|
|
|
- n.addVectors( p2, p1 );
|
|
|
-
|
|
|
- bitan.crossVectors( tang, n );
|
|
|
- n.crossVectors( bitan, tang );
|
|
|
- bitan.normalize();
|
|
|
- n.normalize();
|
|
|
-
|
|
|
- cx = - this.tube * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.
|
|
|
- cy = this.tube * Math.sin( v );
|
|
|
+ var cx = - this.tube * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.
|
|
|
+ var cy = this.tube * Math.sin( v );
|
|
|
|
|
|
- p1.x += cx * n.x + cy * bitan.x;
|
|
|
- p1.y += cx * n.y + cy * bitan.y;
|
|
|
- p1.z += cx * n.z + cy * bitan.z;
|
|
|
+ var pos = new THREE.Vector3();
|
|
|
+ pos.x = p1.x + cx * n.x + cy * bitan.x;
|
|
|
+ pos.y = p1.y + cx * n.y + cy * bitan.y;
|
|
|
+ pos.z = p1.z + cx * n.z + cy * bitan.z;
|
|
|
|
|
|
- this.grid[ i ][ j ] = vert( p1.x, p1.y, p1.z );
|
|
|
+ this.grid[ i ][ j ] = scope.vertices.push( pos ) - 1;;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -82,16 +80,9 @@ THREE.TorusKnotGeometry = function ( radius, tube, radialSegments, tubularSegmen
|
|
|
this.computeFaceNormals();
|
|
|
this.computeVertexNormals();
|
|
|
|
|
|
- function vert( x, y, z ) {
|
|
|
-
|
|
|
- return scope.vertices.push( new THREE.Vector3( x, y, z ) ) - 1;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function getPos( u, v, in_q, in_p, radius, heightScale ) {
|
|
|
+ function getPos( u, in_q, in_p, radius, heightScale ) {
|
|
|
|
|
|
var cu = Math.cos( u );
|
|
|
- var cv = Math.cos( v );
|
|
|
var su = Math.sin( u );
|
|
|
var quOverP = in_q / in_p * u;
|
|
|
var cs = Math.cos( quOverP );
|