Procházet zdrojové kódy

Update TorusGeometry with thetaStart and thetaLength (#32760)

3DPK před 1 měsícem
rodič
revize
f294fefbfd

+ 6 - 2
docs/scenes/geometry-browser.html

@@ -558,14 +558,16 @@
 						tube: 3,
 						tube: 3,
 						radialSegments: 16,
 						radialSegments: 16,
 						tubularSegments: 100,
 						tubularSegments: 100,
-						arc: twoPi
+						arc: twoPi,
+						thetaStart: 0,
+						thetaLength: twoPi
 					};
 					};
 
 
 					function generateGeometry() {
 					function generateGeometry() {
 
 
 						updateGroupGeometry( mesh,
 						updateGroupGeometry( mesh,
 							new TorusGeometry(
 							new TorusGeometry(
-								data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
+								data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc, data.thetaStart, data.thetaLength
 							)
 							)
 						);
 						);
 
 
@@ -578,6 +580,8 @@
 					folder.add( data, 'radialSegments', 2, 30 ).step( 1 ).onChange( generateGeometry );
 					folder.add( data, 'radialSegments', 2, 30 ).step( 1 ).onChange( generateGeometry );
 					folder.add( data, 'tubularSegments', 3, 200 ).step( 1 ).onChange( generateGeometry );
 					folder.add( data, 'tubularSegments', 3, 200 ).step( 1 ).onChange( generateGeometry );
 					folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
 					folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
+					folder.add( data, 'thetaStart', 0.1, twoPi ).onChange( generateGeometry );
+					folder.add( data, 'thetaLength', 0.1, twoPi ).onChange( generateGeometry );
 
 
 					generateGeometry();
 					generateGeometry();
 
 

+ 8 - 3
src/geometries/TorusGeometry.js

@@ -25,8 +25,10 @@ class TorusGeometry extends BufferGeometry {
 	 * @param {number} [radialSegments=12] - The number of radial segments.
 	 * @param {number} [radialSegments=12] - The number of radial segments.
 	 * @param {number} [tubularSegments=48] - The number of tubular segments.
 	 * @param {number} [tubularSegments=48] - The number of tubular segments.
 	 * @param {number} [arc=Math.PI*2] - Central angle in radians.
 	 * @param {number} [arc=Math.PI*2] - Central angle in radians.
+	 * @param {number} [thetaStart=0] - Start of the tubular sweep in radians.
+	 * @param {number} [thetaLength=Math.PI*2] - Length of the tubular sweep in radians.
 	 */
 	 */
-	constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {
+	constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI * 2 ) {
 
 
 		super();
 		super();
 
 
@@ -44,7 +46,9 @@ class TorusGeometry extends BufferGeometry {
 			tube: tube,
 			tube: tube,
 			radialSegments: radialSegments,
 			radialSegments: radialSegments,
 			tubularSegments: tubularSegments,
 			tubularSegments: tubularSegments,
-			arc: arc
+			arc: arc,
+			thetaStart: thetaStart,
+			thetaLength: thetaLength,
 		};
 		};
 
 
 		radialSegments = Math.floor( radialSegments );
 		radialSegments = Math.floor( radialSegments );
@@ -67,10 +71,11 @@ class TorusGeometry extends BufferGeometry {
 
 
 		for ( let j = 0; j <= radialSegments; j ++ ) {
 		for ( let j = 0; j <= radialSegments; j ++ ) {
 
 
+			const v = thetaStart + ( j / radialSegments ) * thetaLength;
+
 			for ( let i = 0; i <= tubularSegments; i ++ ) {
 			for ( let i = 0; i <= tubularSegments; i ++ ) {
 
 
 				const u = i / tubularSegments * arc;
 				const u = i / tubularSegments * arc;
-				const v = j / radialSegments * Math.PI * 2;
 
 
 				// vertex
 				// vertex
 
 

粤ICP备19079148号