Skip to content

Commit 8430065

Browse files
committed
TorusKnotBufferGeometry: Parameter changes
1 parent 4c69baa commit 8430065

11 files changed

Lines changed: 83 additions & 114 deletions

File tree

docs/api/extras/geometries/TorusKnotBufferGeometry.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,15 @@ <h2>Example</h2>
2929
<h2>Constructor</h2>
3030

3131

32-
<h3>[name]([page:Float radius], [page:Float tube], [page:Integer radialSegments], [page:Integer tubularSegments], [page:Integer p], [page:Integer q], [page:Float heightScale], [page:Float arc])</h3>
32+
<h3>[name]([page:Float radius], [page:Float tube], [page:Integer tubularSegments], [page:Integer radialSegments], [page:Integer p], [page:Integer q])</h3>
3333
<div>
3434
<ul>
3535
<li>radius — Default is 100.</li>
3636
<li>tube — Diameter of the tube. Default is 40.</li>
37-
<li>radialSegments — Default is 64.</li>
38-
<li>tubularSegments — Default is 8.</li>
37+
<li>tubularSegments — Default is 64.</li>
38+
<li>radialSegments — Default is 8.</li>
3939
<li>p — This value determines, how many times the geometry winds around its axis of rotational symmetry. Default is 2.</li>
4040
<li>q — This value determines, how many times the geometry winds around a circle in the interior of the torus. Default is 3.</li>
41-
<li>heightScale — Default is 1.</li>
42-
<li>arc — Central angle. Default is Math.PI * 2.</li>
4341
</ul>
4442
</div>
4543

docs/api/extras/geometries/TorusKnotGeometry.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,15 @@ <h2>Example</h2>
2929
<h2>Constructor</h2>
3030

3131

32-
<h3>[name]([page:Float radius], [page:Float tube], [page:Integer radialSegments], [page:Integer tubularSegments], [page:Integer p], [page:Integer q], [page:Float heightScale], [page:Float arc])</h3>
32+
<h3>[name]([page:Float radius], [page:Float tube], [page:Integer tubularSegments], [page:Integer radialSegments], [page:Integer p], [page:Integer q])</h3>
3333
<div>
3434
<ul>
3535
<li>radius — Default is 100.</li>
3636
<li>tube — Diameter of the tube. Default is 40.</li>
37-
<li>radialSegments — Default is 64.</li>
38-
<li>tubularSegments — Default is 8.</li>
37+
<li>tubularSegments — Default is 64.</li>
38+
<li>radialSegments — Default is 8.</li>
3939
<li>p — This value determines, how many times the geometry winds around its axis of rotational symmetry. Default is 2.</li>
4040
<li>q — This value determines, how many times the geometry winds around a circle in the interior of the torus. Default is 3.</li>
41-
<li>heightScale — Default is 1.</li>
42-
<li>arc — Central angle. Default is Math.PI * 2.</li>
4341
</ul>
4442
</div>
4543

docs/scenes/js/geometry.js

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -752,20 +752,18 @@ var guis = {
752752
var data = {
753753
radius : 10,
754754
tube : 3,
755-
radialSegments : 64,
756-
tubularSegments : 8,
755+
tubularSegments : 64,
756+
radialSegments : 8,
757757
p : 2,
758-
q : 3,
759-
heightScale : 1,
760-
arc : twoPi
758+
q : 3
761759
};
762760

763761
function generateGeometry() {
764762

765763
updateGroupGeometry( mesh,
766764
new THREE.TorusKnotBufferGeometry(
767-
data.radius, data.tube, data.radialSegments, data.tubularSegments,
768-
data.p, data.q, data.heightScale, data.arc
765+
data.radius, data.tube, data.tubularSegments, data.radialSegments,
766+
data.p, data.q
769767
)
770768
);
771769

@@ -775,12 +773,10 @@ var guis = {
775773

776774
folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
777775
folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
778-
folder.add( data, 'radialSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
779-
folder.add( data, 'tubularSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
776+
folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
777+
folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
780778
folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry );
781779
folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry );
782-
folder.add( data, 'heightScale', 1, 20 ).onChange( generateGeometry );
783-
folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
784780

785781
generateGeometry();
786782

@@ -791,20 +787,18 @@ var guis = {
791787
var data = {
792788
radius : 10,
793789
tube : 3,
794-
radialSegments : 64,
795-
tubularSegments : 8,
790+
tubularSegments : 64,
791+
radialSegments : 8,
796792
p : 2,
797-
q : 3,
798-
heightScale : 1,
799-
arc : twoPi
793+
q : 3
800794
};
801795

802796
function generateGeometry() {
803797

804798
updateGroupGeometry( mesh,
805799
new THREE.TorusKnotGeometry(
806-
data.radius, data.tube, data.radialSegments, data.tubularSegments,
807-
data.p, data.q, data.heightScale, data.arc
800+
data.radius, data.tube, data.tubularSegments, data.radialSegments,
801+
data.p, data.q
808802
)
809803
);
810804

@@ -814,12 +808,10 @@ var guis = {
814808

815809
folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
816810
folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
817-
folder.add( data, 'radialSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
818-
folder.add( data, 'tubularSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
811+
folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
812+
folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
819813
folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry );
820814
folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry );
821-
folder.add( data, 'heightScale', 1, 20 ).onChange( generateGeometry );
822-
folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
823815

824816
generateGeometry();
825817

editor/js/Menubar.Add.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,12 @@ Menubar.Add = function ( editor ) {
198198

199199
var radius = 2;
200200
var tube = 0.8;
201-
var radialSegments = 64;
202-
var tubularSegments = 12;
201+
var tubularSegments = 64;
202+
var radialSegments = 12;
203203
var p = 2;
204204
var q = 3;
205-
var heightScale = 1;
206205

207-
var geometry = new THREE.TorusKnotGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale );
206+
var geometry = new THREE.TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q );
208207
var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() );
209208
mesh.name = 'TorusKnot ' + ( ++ meshCount );
210209

editor/js/Sidebar.Geometry.TorusKnotGeometry.js

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,6 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) {
3030

3131
container.add( tubeRow );
3232

33-
// radialSegments
34-
35-
var radialSegmentsRow = new UI.Row();
36-
var radialSegments = new UI.Integer( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update );
37-
38-
radialSegmentsRow.add( new UI.Text( 'Radial segments' ).setWidth( '90px' ) );
39-
radialSegmentsRow.add( radialSegments );
40-
41-
container.add( radialSegmentsRow );
42-
4333
// tubularSegments
4434

4535
var tubularSegmentsRow = new UI.Row();
@@ -50,6 +40,16 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) {
5040

5141
container.add( tubularSegmentsRow );
5242

43+
// radialSegments
44+
45+
var radialSegmentsRow = new UI.Row();
46+
var radialSegments = new UI.Integer( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update );
47+
48+
radialSegmentsRow.add( new UI.Text( 'Radial segments' ).setWidth( '90px' ) );
49+
radialSegmentsRow.add( radialSegments );
50+
51+
container.add( radialSegmentsRow );
52+
5353
// p
5454

5555
var pRow = new UI.Row();
@@ -70,16 +70,6 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) {
7070

7171
container.add( qRow );
7272

73-
// heightScale
74-
75-
var heightScaleRow = new UI.Row();
76-
var heightScale = new UI.Number( parameters.heightScale ).onChange( update );
77-
78-
pRow.add( new UI.Text( 'Height scale' ).setWidth( '90px' ) );
79-
pRow.add( heightScale );
80-
81-
container.add( heightScaleRow );
82-
8373

8474
//
8575

@@ -88,11 +78,10 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) {
8878
editor.execute( new SetGeometryCommand( object, new THREE.TorusKnotGeometry(
8979
radius.getValue(),
9080
tube.getValue(),
91-
radialSegments.getValue(),
9281
tubularSegments.getValue(),
82+
radialSegments.getValue(),
9383
p.getValue(),
94-
q.getValue(),
95-
heightScale.getValue()
84+
q.getValue()
9685
) ) );
9786

9887
}

examples/js/ParametricGeometries.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -170,18 +170,16 @@ THREE.ParametricGeometries.TubeGeometry.prototype.constructor = THREE.Parametric
170170
* Parametric Replacement for TorusKnotGeometry
171171
*
172172
*********************************************/
173-
THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segmentsR, segmentsT, p, q, heightScale ) {
173+
THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segmentsT, segmentsR, p, q ) {
174174

175175
var scope = this;
176176

177177
this.radius = radius || 200;
178178
this.tube = tube || 40;
179-
this.segmentsR = segmentsR || 64;
180-
this.segmentsT = segmentsT || 8;
179+
this.segmentsT = segmentsT || 64;
180+
this.segmentsR = segmentsR || 8;
181181
this.p = p || 2;
182182
this.q = q || 3;
183-
this.heightScale = heightScale || 1;
184-
185183

186184
var TorusKnotCurve = THREE.Curve.create(
187185

@@ -198,13 +196,13 @@ THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segments
198196
ty = ( 1 + r * Math.cos( q * t ) ) * Math.sin( p * t ),
199197
tz = r * Math.sin( q * t );
200198

201-
return new THREE.Vector3( tx, ty * heightScale, tz ).multiplyScalar( radius );
199+
return new THREE.Vector3( tx, ty, tz ).multiplyScalar( radius );
202200

203201
}
204202

205203
);
206-
var segments = segmentsR;
207-
var radiusSegments = segmentsT;
204+
var segments = segmentsT;
205+
var radiusSegments = segmentsR;
208206
var extrudePath = new TorusKnotCurve();
209207

210208
THREE.ParametricGeometries.TubeGeometry.call( this, extrudePath, segments, tube, radiusSegments, true, false );

examples/webgl_geometries2.html

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,17 @@
6363
new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true, opacity: 0.1, side: THREE.DoubleSide } )
6464
];
6565

66-
67-
var heightScale = 1;
6866
var p = 2;
6967
var q = 3;
70-
var radius = 150, tube = 10, segmentsR = 50, segmentsT = 20;
68+
var radius = 150, tube = 10, segmentsT = 50, segmentsR = 20;
7169

7270
var GrannyKnot = new THREE.Curves.GrannyKnot();
7371

74-
var torus2 = new THREE.ParametricGeometries.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q, heightScale );
72+
var torus2 = new THREE.ParametricGeometries.TorusKnotGeometry( radius, tube, segmentsT, segmentsR, p , q );
7573
var sphere2 = new THREE.ParametricGeometries.SphereGeometry( 75, 20, 10 );
7674
var tube2 = new THREE.ParametricGeometries.TubeGeometry( GrannyKnot, 150, 2, 8, true, false );
7775

78-
// var torus = new THREE.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q, heightScale );
76+
// var torus = new THREE.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q );
7977
// var sphere = new THREE.SphereGeometry( 75, 20, 10 );
8078
// var tube = new THREE.TubeGeometry( GrannyKnot, 150, 2, 8, true, false );
8179

src/extras/geometries/TorusKnotBufferGeometry.js

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* see: http://www.blackpawn.com/texts/pqtorus/
55
*/
6-
THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubularSegments, p, q, heightScale, arc ) {
6+
THREE.TorusKnotBufferGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {
77

88
THREE.BufferGeometry.call( this );
99

@@ -12,22 +12,20 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
1212
this.parameters = {
1313
radius: radius,
1414
tube: tube,
15-
radialSegments: radialSegments,
1615
tubularSegments: tubularSegments,
16+
radialSegments: radialSegments,
1717
p: p,
18-
q: q,
19-
heightScale: heightScale,
20-
arc: arc
18+
q: q
2119
};
2220

21+
if( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );
22+
2323
radius = radius || 100;
2424
tube = tube || 40;
25-
radialSegments = Math.floor( radialSegments ) || 64;
26-
tubularSegments = Math.floor( tubularSegments ) || 6;
25+
tubularSegments = Math.floor( tubularSegments ) || 64;
26+
radialSegments = Math.floor( radialSegments ) || 8;
2727
p = p || 2;
2828
q = q || 3;
29-
heightScale = heightScale || 1;
30-
arc = arc || Math.PI * 2;
3129

3230
// used to calculate buffer length
3331
var vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) );
@@ -55,17 +53,17 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
5553

5654
// generate vertices, normals and uvs
5755

58-
for ( i = 0; i <= radialSegments; ++ i ) {
56+
for ( i = 0; i <= tubularSegments; ++ i ) {
5957

60-
// the radian "u" is used to calculate the position on the torus curve of the current radial segement
58+
// the radian "u" is used to calculate the position on the torus curve of the current tubular segement
6159

62-
var u = i / radialSegments * p * arc;
60+
var u = i / tubularSegments * p * Math.PI * 2;
6361

6462
// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.
6563
// these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions
6664

67-
calculatePositionOnCurve( u, p, q, radius, heightScale, P1 );
68-
calculatePositionOnCurve( u + 0.01, p, q, radius, heightScale, P2 );
65+
calculatePositionOnCurve( u, p, q, radius, P1 );
66+
calculatePositionOnCurve( u + 0.01, p, q, radius, P2 );
6967

7068
// calculate orthonormal basis
7169

@@ -79,12 +77,12 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
7977
B.normalize();
8078
N.normalize();
8179

82-
for ( j = 0; j <= tubularSegments; ++ j ) {
80+
for ( j = 0; j <= radialSegments; ++ j ) {
8381

8482
// now calculate the vertices. they are nothing more than an extrusion of the torus curve.
8583
// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.
8684

87-
var v = j / tubularSegments * Math.PI * 2;
85+
var v = j / radialSegments * Math.PI * 2;
8886
var cx = - tube * Math.cos( v );
8987
var cy = tube * Math.sin( v );
9088

@@ -103,8 +101,8 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
103101
normals.setXYZ( index, normal.x, normal.y, normal.z );
104102

105103
// uv
106-
uv.x = i / radialSegments;
107-
uv.y = j / tubularSegments;
104+
uv.x = i / tubularSegments;
105+
uv.y = j / radialSegments;
108106
uvs.setXY( index, uv.x, uv.y );
109107

110108
// increase index
@@ -116,15 +114,15 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
116114

117115
// generate indices
118116

119-
for ( j = 1; j <= radialSegments; j ++ ) {
117+
for ( j = 1; j <= tubularSegments; j ++ ) {
120118

121-
for ( i = 1; i <= tubularSegments; i ++ ) {
119+
for ( i = 1; i <= radialSegments; i ++ ) {
122120

123121
// indices
124-
var a = ( tubularSegments + 1 ) * ( j - 1 ) + ( i - 1 );
125-
var b = ( tubularSegments + 1 ) * j + ( i - 1 );
126-
var c = ( tubularSegments + 1 ) * j + i;
127-
var d = ( tubularSegments + 1 ) * ( j - 1 ) + i;
122+
var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );
123+
var b = ( radialSegments + 1 ) * j + ( i - 1 );
124+
var c = ( radialSegments + 1 ) * j + i;
125+
var d = ( radialSegments + 1 ) * ( j - 1 ) + i;
128126

129127
// face one
130128
indices.setX( indexOffset, a ); indexOffset++;
@@ -149,7 +147,7 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
149147

150148
// this function calculates the current position on the torus curve
151149

152-
function calculatePositionOnCurve( u, p, q, radius, heightScale, position ) {
150+
function calculatePositionOnCurve( u, p, q, radius, position ) {
153151

154152
var cu = Math.cos( u );
155153
var su = Math.sin( u );
@@ -158,7 +156,7 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular
158156

159157
position.x = radius * ( 2 + cs ) * 0.5 * cu;
160158
position.y = radius * ( 2 + cs ) * su * 0.5;
161-
position.z = heightScale * radius * Math.sin( quOverP ) * 0.5;
159+
position.z = radius * Math.sin( quOverP ) * 0.5;
162160

163161
}
164162

0 commit comments

Comments
 (0)