Skip to content

Commit

Permalink
added an optional function taper to THREE.TubeGeometry to customize v…
Browse files Browse the repository at this point in the history
…ertex projections
  • Loading branch information
jonobr1 committed Nov 25, 2014
1 parent f011c39 commit 79a082a
Showing 1 changed file with 15 additions and 4 deletions.
19 changes: 15 additions & 4 deletions src/extras/geometries/TubeGeometry.js
Expand Up @@ -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
*
Expand All @@ -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 );

Expand All @@ -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 = [];

Expand All @@ -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(),
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 ) {
Expand Down

0 comments on commit 79a082a

Please sign in to comment.