diff --git a/docs/api/extras/geometries/TorusKnotBufferGeometry.html b/docs/api/extras/geometries/TorusKnotBufferGeometry.html index 292536bcd41fca..6b6223261958b3 100644 --- a/docs/api/extras/geometries/TorusKnotBufferGeometry.html +++ b/docs/api/extras/geometries/TorusKnotBufferGeometry.html @@ -29,17 +29,15 @@

Example

Constructor

-

[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])

+

[name]([page:Float radius], [page:Float tube], [page:Integer tubularSegments], [page:Integer radialSegments], [page:Integer p], [page:Integer q])

diff --git a/docs/api/extras/geometries/TorusKnotGeometry.html b/docs/api/extras/geometries/TorusKnotGeometry.html index be2878328aa9f8..2b7ba58b514a1f 100644 --- a/docs/api/extras/geometries/TorusKnotGeometry.html +++ b/docs/api/extras/geometries/TorusKnotGeometry.html @@ -29,17 +29,15 @@

Example

Constructor

-

[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])

+

[name]([page:Float radius], [page:Float tube], [page:Integer tubularSegments], [page:Integer radialSegments], [page:Integer p], [page:Integer q])

diff --git a/docs/scenes/js/geometry.js b/docs/scenes/js/geometry.js index fd34e508db53a9..ae6a6cdcd5bff2 100644 --- a/docs/scenes/js/geometry.js +++ b/docs/scenes/js/geometry.js @@ -752,20 +752,18 @@ var guis = { var data = { radius : 10, tube : 3, - radialSegments : 64, - tubularSegments : 8, + tubularSegments : 64, + radialSegments : 8, p : 2, - q : 3, - heightScale : 1, - arc : twoPi + q : 3 }; function generateGeometry() { updateGroupGeometry( mesh, new THREE.TorusKnotBufferGeometry( - data.radius, data.tube, data.radialSegments, data.tubularSegments, - data.p, data.q, data.heightScale, data.arc + data.radius, data.tube, data.tubularSegments, data.radialSegments, + data.p, data.q ) ); @@ -775,12 +773,10 @@ var guis = { folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry ); folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry ); - folder.add( data, 'radialSegments', 3, 300 ).step( 1 ).onChange( generateGeometry ); - folder.add( data, 'tubularSegments', 3, 20 ).step( 1 ).onChange( generateGeometry ); + folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry ); + folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry ); folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry ); folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry ); - folder.add( data, 'heightScale', 1, 20 ).onChange( generateGeometry ); - folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry ); generateGeometry(); @@ -791,20 +787,18 @@ var guis = { var data = { radius : 10, tube : 3, - radialSegments : 64, - tubularSegments : 8, + tubularSegments : 64, + radialSegments : 8, p : 2, - q : 3, - heightScale : 1, - arc : twoPi + q : 3 }; function generateGeometry() { updateGroupGeometry( mesh, new THREE.TorusKnotGeometry( - data.radius, data.tube, data.radialSegments, data.tubularSegments, - data.p, data.q, data.heightScale, data.arc + data.radius, data.tube, data.tubularSegments, data.radialSegments, + data.p, data.q ) ); @@ -814,12 +808,10 @@ var guis = { folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry ); folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry ); - folder.add( data, 'radialSegments', 3, 300 ).step( 1 ).onChange( generateGeometry ); - folder.add( data, 'tubularSegments', 3, 20 ).step( 1 ).onChange( generateGeometry ); + folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry ); + folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry ); folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry ); folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry ); - folder.add( data, 'heightScale', 1, 20 ).onChange( generateGeometry ); - folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry ); generateGeometry(); diff --git a/editor/js/Menubar.Add.js b/editor/js/Menubar.Add.js index a1f7d728967d81..3baef98c2aac8d 100644 --- a/editor/js/Menubar.Add.js +++ b/editor/js/Menubar.Add.js @@ -198,13 +198,12 @@ Menubar.Add = function ( editor ) { var radius = 2; var tube = 0.8; - var radialSegments = 64; - var tubularSegments = 12; + var tubularSegments = 64; + var radialSegments = 12; var p = 2; var q = 3; - var heightScale = 1; - var geometry = new THREE.TorusKnotGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale ); + var geometry = new THREE.TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q ); var mesh = new THREE.Mesh( geometry, new THREE.MeshStandardMaterial() ); mesh.name = 'TorusKnot ' + ( ++ meshCount ); diff --git a/editor/js/Sidebar.Geometry.TorusKnotGeometry.js b/editor/js/Sidebar.Geometry.TorusKnotGeometry.js index 1e6f274ebf4714..15e5956a28018b 100644 --- a/editor/js/Sidebar.Geometry.TorusKnotGeometry.js +++ b/editor/js/Sidebar.Geometry.TorusKnotGeometry.js @@ -30,16 +30,6 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) { container.add( tubeRow ); - // radialSegments - - var radialSegmentsRow = new UI.Row(); - var radialSegments = new UI.Integer( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update ); - - radialSegmentsRow.add( new UI.Text( 'Radial segments' ).setWidth( '90px' ) ); - radialSegmentsRow.add( radialSegments ); - - container.add( radialSegmentsRow ); - // tubularSegments var tubularSegmentsRow = new UI.Row(); @@ -50,6 +40,16 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) { container.add( tubularSegmentsRow ); + // radialSegments + + var radialSegmentsRow = new UI.Row(); + var radialSegments = new UI.Integer( parameters.radialSegments ).setRange( 1, Infinity ).onChange( update ); + + radialSegmentsRow.add( new UI.Text( 'Radial segments' ).setWidth( '90px' ) ); + radialSegmentsRow.add( radialSegments ); + + container.add( radialSegmentsRow ); + // p var pRow = new UI.Row(); @@ -70,16 +70,6 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) { container.add( qRow ); - // heightScale - - var heightScaleRow = new UI.Row(); - var heightScale = new UI.Number( parameters.heightScale ).onChange( update ); - - pRow.add( new UI.Text( 'Height scale' ).setWidth( '90px' ) ); - pRow.add( heightScale ); - - container.add( heightScaleRow ); - // @@ -88,11 +78,10 @@ Sidebar.Geometry.TorusKnotGeometry = function ( editor, object ) { editor.execute( new SetGeometryCommand( object, new THREE.TorusKnotGeometry( radius.getValue(), tube.getValue(), - radialSegments.getValue(), tubularSegments.getValue(), + radialSegments.getValue(), p.getValue(), - q.getValue(), - heightScale.getValue() + q.getValue() ) ) ); } diff --git a/examples/js/ParametricGeometries.js b/examples/js/ParametricGeometries.js index dd477414adb22e..050d9a89522180 100644 --- a/examples/js/ParametricGeometries.js +++ b/examples/js/ParametricGeometries.js @@ -170,18 +170,16 @@ THREE.ParametricGeometries.TubeGeometry.prototype.constructor = THREE.Parametric * Parametric Replacement for TorusKnotGeometry * *********************************************/ -THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segmentsR, segmentsT, p, q, heightScale ) { +THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segmentsT, segmentsR, p, q ) { var scope = this; this.radius = radius || 200; this.tube = tube || 40; - this.segmentsR = segmentsR || 64; - this.segmentsT = segmentsT || 8; + this.segmentsT = segmentsT || 64; + this.segmentsR = segmentsR || 8; this.p = p || 2; this.q = q || 3; - this.heightScale = heightScale || 1; - var TorusKnotCurve = THREE.Curve.create( @@ -198,13 +196,13 @@ THREE.ParametricGeometries.TorusKnotGeometry = function ( radius, tube, segments ty = ( 1 + r * Math.cos( q * t ) ) * Math.sin( p * t ), tz = r * Math.sin( q * t ); - return new THREE.Vector3( tx, ty * heightScale, tz ).multiplyScalar( radius ); + return new THREE.Vector3( tx, ty, tz ).multiplyScalar( radius ); } ); - var segments = segmentsR; - var radiusSegments = segmentsT; + var segments = segmentsT; + var radiusSegments = segmentsR; var extrudePath = new TorusKnotCurve(); THREE.ParametricGeometries.TubeGeometry.call( this, extrudePath, segments, tube, radiusSegments, true, false ); diff --git a/examples/webgl_geometries2.html b/examples/webgl_geometries2.html index e1f670088628a2..cac44d483f85ee 100644 --- a/examples/webgl_geometries2.html +++ b/examples/webgl_geometries2.html @@ -63,19 +63,17 @@ new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true, opacity: 0.1, side: THREE.DoubleSide } ) ]; - - var heightScale = 1; var p = 2; var q = 3; - var radius = 150, tube = 10, segmentsR = 50, segmentsT = 20; + var radius = 150, tube = 10, segmentsT = 50, segmentsR = 20; var GrannyKnot = new THREE.Curves.GrannyKnot(); - var torus2 = new THREE.ParametricGeometries.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q, heightScale ); + var torus2 = new THREE.ParametricGeometries.TorusKnotGeometry( radius, tube, segmentsT, segmentsR, p , q ); var sphere2 = new THREE.ParametricGeometries.SphereGeometry( 75, 20, 10 ); var tube2 = new THREE.ParametricGeometries.TubeGeometry( GrannyKnot, 150, 2, 8, true, false ); - // var torus = new THREE.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q, heightScale ); + // var torus = new THREE.TorusKnotGeometry( radius, tube, segmentsR, segmentsT, p , q ); // var sphere = new THREE.SphereGeometry( 75, 20, 10 ); // var tube = new THREE.TubeGeometry( GrannyKnot, 150, 2, 8, true, false ); diff --git a/src/extras/geometries/TorusKnotBufferGeometry.js b/src/extras/geometries/TorusKnotBufferGeometry.js index 1becf230fd0800..e63ae225bdc056 100644 --- a/src/extras/geometries/TorusKnotBufferGeometry.js +++ b/src/extras/geometries/TorusKnotBufferGeometry.js @@ -3,7 +3,7 @@ * * see: http://www.blackpawn.com/texts/pqtorus/ */ -THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubularSegments, p, q, heightScale, arc ) { +THREE.TorusKnotBufferGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { THREE.BufferGeometry.call( this ); @@ -12,22 +12,20 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular this.parameters = { radius: radius, tube: tube, - radialSegments: radialSegments, tubularSegments: tubularSegments, + radialSegments: radialSegments, p: p, - q: q, - heightScale: heightScale, - arc: arc + q: q }; + if( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + radius = radius || 100; tube = tube || 40; - radialSegments = Math.floor( radialSegments ) || 64; - tubularSegments = Math.floor( tubularSegments ) || 6; + tubularSegments = Math.floor( tubularSegments ) || 64; + radialSegments = Math.floor( radialSegments ) || 8; p = p || 2; q = q || 3; - heightScale = heightScale || 1; - arc = arc || Math.PI * 2; // used to calculate buffer length var vertexCount = ( ( radialSegments + 1 ) * ( tubularSegments + 1 ) ); @@ -55,17 +53,17 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular // generate vertices, normals and uvs - for ( i = 0; i <= radialSegments; ++ i ) { + for ( i = 0; i <= tubularSegments; ++ i ) { - // the radian "u" is used to calculate the position on the torus curve of the current radial segement + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement - var u = i / radialSegments * p * arc; + var u = i / tubularSegments * p * Math.PI * 2; // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions - calculatePositionOnCurve( u, p, q, radius, heightScale, P1 ); - calculatePositionOnCurve( u + 0.01, p, q, radius, heightScale, P2 ); + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); // calculate orthonormal basis @@ -79,12 +77,12 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular B.normalize(); N.normalize(); - for ( j = 0; j <= tubularSegments; ++ j ) { + for ( j = 0; j <= radialSegments; ++ j ) { // now calculate the vertices. they are nothing more than an extrusion of the torus curve. // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. - var v = j / tubularSegments * Math.PI * 2; + var v = j / radialSegments * Math.PI * 2; var cx = - tube * Math.cos( v ); var cy = tube * Math.sin( v ); @@ -103,8 +101,8 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular normals.setXYZ( index, normal.x, normal.y, normal.z ); // uv - uv.x = i / radialSegments; - uv.y = j / tubularSegments; + uv.x = i / tubularSegments; + uv.y = j / radialSegments; uvs.setXY( index, uv.x, uv.y ); // increase index @@ -116,15 +114,15 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular // generate indices - for ( j = 1; j <= radialSegments; j ++ ) { + for ( j = 1; j <= tubularSegments; j ++ ) { - for ( i = 1; i <= tubularSegments; i ++ ) { + for ( i = 1; i <= radialSegments; i ++ ) { // indices - var a = ( tubularSegments + 1 ) * ( j - 1 ) + ( i - 1 ); - var b = ( tubularSegments + 1 ) * j + ( i - 1 ); - var c = ( tubularSegments + 1 ) * j + i; - var d = ( tubularSegments + 1 ) * ( j - 1 ) + i; + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; // face one indices.setX( indexOffset, a ); indexOffset++; @@ -149,7 +147,7 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular // this function calculates the current position on the torus curve - function calculatePositionOnCurve( u, p, q, radius, heightScale, position ) { + function calculatePositionOnCurve( u, p, q, radius, position ) { var cu = Math.cos( u ); var su = Math.sin( u ); @@ -158,7 +156,7 @@ THREE.TorusKnotBufferGeometry = function ( radius, tube, radialSegments, tubular position.x = radius * ( 2 + cs ) * 0.5 * cu; position.y = radius * ( 2 + cs ) * su * 0.5; - position.z = heightScale * radius * Math.sin( quOverP ) * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; } diff --git a/src/extras/geometries/TorusKnotGeometry.js b/src/extras/geometries/TorusKnotGeometry.js index 93c77118e088dd..cd8209b27b4737 100644 --- a/src/extras/geometries/TorusKnotGeometry.js +++ b/src/extras/geometries/TorusKnotGeometry.js @@ -2,7 +2,7 @@ * @author oosmoxiecode */ -THREE.TorusKnotGeometry = function ( radius, tube, radialSegments, tubularSegments, p, q, heightScale, arc ) { +THREE.TorusKnotGeometry = function ( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { THREE.Geometry.call( this ); @@ -11,15 +11,15 @@ THREE.TorusKnotGeometry = function ( radius, tube, radialSegments, tubularSegmen this.parameters = { radius: radius, tube: tube, - radialSegments: radialSegments, tubularSegments: tubularSegments, + radialSegments: radialSegments, p: p, - q: q, - heightScale: heightScale, - arc: arc + q: q }; - this.fromBufferGeometry( new THREE.TorusKnotBufferGeometry( radius, tube, radialSegments, tubularSegments, p, q, heightScale, arc ) ); + if( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + + this.fromBufferGeometry( new THREE.TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); this.mergeVertices(); }; diff --git a/src/loaders/ObjectLoader.js b/src/loaders/ObjectLoader.js index ae52100edc5d9b..60d86c2be783d1 100755 --- a/src/loaders/ObjectLoader.js +++ b/src/loaders/ObjectLoader.js @@ -225,15 +225,15 @@ THREE.ObjectLoader.prototype = { break; case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': - geometry = new THREE.TorusKnotGeometry( + geometry = new THREE[ data.type ]( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.p, - data.q, - data.heightScale + data.q ); break; diff --git a/test/unit/extras/geometries/TorusKnotGeometry.tests.js b/test/unit/extras/geometries/TorusKnotGeometry.tests.js index 3d864985dc8810..5e94f01b5c9e22 100644 --- a/test/unit/extras/geometries/TorusKnotGeometry.tests.js +++ b/test/unit/extras/geometries/TorusKnotGeometry.tests.js @@ -5,11 +5,10 @@ var parameters = { radius: 10, tube: 20, - radialSegments: 30, - tubularSegments: 10, + tubularSegments: 30, + radialSegments: 10, p: 3, - q: 2, - heightScale: 2.0 + q: 2 }; var geometries; @@ -23,9 +22,9 @@ new THREE.TorusKnotGeometry(), new THREE.TorusKnotGeometry( parameters.radius ), new THREE.TorusKnotGeometry( parameters.radius, parameters.tube ), - new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.radialSegments ), - new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.radialSegments, parameters.tubularSegments ), - new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.radialSegments, parameters.tubularSegments, parameters.p, parameters.q, parameters.heightScale ), + new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.tubularSegments ), + new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.tubularSegments, parameters.radialSegments ), + new THREE.TorusKnotGeometry( parameters.radius, parameters.tube, parameters.tubularSegments, parameters.radialSegments, parameters.p, parameters.q ), ];