|
@@ -2,6 +2,7 @@
|
|
|
* @author WestLangley / https://github.com/WestLangley
|
|
|
* @author zz85 / https://github.com/zz85
|
|
|
* @author miningold / https://github.com/miningold
|
|
|
+ * @author jonobr1 / https://github.com/jonobr1
|
|
|
*
|
|
|
* Modified from the TorusKnotGeometry by @oosmoxiecode
|
|
|
*
|
|
@@ -11,7 +12,7 @@
|
|
|
* http://www.cs.indiana.edu/pub/techreports/TR425.pdf
|
|
|
*/
|
|
|
|
|
|
-THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed ) {
|
|
|
+THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed, taper ) {
|
|
|
|
|
|
THREE.Geometry.call( this );
|
|
|
|
|
@@ -29,6 +30,7 @@ THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed )
|
|
|
radius = radius || 1;
|
|
|
radialSegments = radialSegments || 8;
|
|
|
closed = closed || false;
|
|
|
+ taper = taper || THREE.TubeGeometry.NoTaper;
|
|
|
|
|
|
var grid = [];
|
|
|
|
|
@@ -42,7 +44,7 @@ THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed )
|
|
|
|
|
|
x, y, z,
|
|
|
tx, ty, tz,
|
|
|
- u, v,
|
|
|
+ u, v, r,
|
|
|
|
|
|
cx, cy,
|
|
|
pos, pos2 = new THREE.Vector3(),
|
|
@@ -81,12 +83,14 @@ THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed )
|
|
|
normal = normals[ i ];
|
|
|
binormal = binormals[ i ];
|
|
|
|
|
|
+ r = radius * taper(u);
|
|
|
+
|
|
|
for ( j = 0; j < radialSegments; j ++ ) {
|
|
|
|
|
|
v = j / radialSegments * 2 * Math.PI;
|
|
|
|
|
|
- cx = - radius * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.
|
|
|
- cy = radius * Math.sin( v );
|
|
|
+ cx = - r * Math.cos( v ); // TODO: Hack: Negating it so it faces outside.
|
|
|
+ cy = r * Math.sin( v );
|
|
|
|
|
|
pos2.copy( pos );
|
|
|
pos2.x += cx * normal.x + cy * binormal.x;
|
|
@@ -135,6 +139,13 @@ THREE.TubeGeometry = function ( path, segments, radius, radialSegments, closed )
|
|
|
THREE.TubeGeometry.prototype = Object.create( THREE.Geometry.prototype );
|
|
|
THREE.TubeGeometry.prototype.constructor = THREE.TubeGeometry;
|
|
|
|
|
|
+THREE.TubeGeometry.NoTaper = function(u) {
|
|
|
+ return u;
|
|
|
+};
|
|
|
+
|
|
|
+THREE.TubeGeometry.SinusoidalTaper = function(u) {
|
|
|
+ return Math.sin(Math.PI * u);
|
|
|
+};
|
|
|
|
|
|
// For computing of Frenet frames, exposing the tangents, normals and binormals the spline
|
|
|
THREE.TubeGeometry.FrenetFrames = function ( path, segments, closed ) {
|