Browse Source

Proper code for NURBS curves as per #3391.

Mr.doob 12 years ago
parent
commit
3aee7dfe6a
2 changed files with 20 additions and 8 deletions
  1. 10 4
      examples/canvas_geometry_nurbs.html
  2. 10 4
      examples/webgl_geometry_nurbs.html

+ 10 - 4
examples/canvas_geometry_nurbs.html

@@ -78,18 +78,24 @@
 				var nurbsKnots = [];
 				var nurbsDegree = 3;
 
-				for ( var i = 1, j = 20; i < j; i ++ ) {
+				for ( var i = 0; i <= nurbsDegree; i ++ ) {
+
+					nurbsKnots.push( 0 );
+
+				}
+
+				for ( var i = 0, j = 20; i < j; i ++ ) {
 
 					nurbsControlPoints.push(
-						new THREE.Vector4 (
+						new THREE.Vector4(
 							Math.random() * 400 - 200,
 							Math.random() * 400,
 							Math.random() * 400 - 200,
-							1
+							1 // weight of control point: higher means stronger attraction
 						)
 					);
 
-					var knot = ( i - nurbsDegree ) / ( j - nurbsDegree * 2 );
+					var knot = ( i + 1 ) / ( j - nurbsDegree );
 					nurbsKnots.push( THREE.Math.clamp( knot, 0, 1 ) );
 
 				}

+ 10 - 4
examples/webgl_geometry_nurbs.html

@@ -85,18 +85,24 @@
 				var nurbsKnots = [];
 				var nurbsDegree = 3;
 
-				for ( var i = 1, j = 20; i < j; i ++ ) {
+				for ( var i = 0; i <= nurbsDegree; i ++ ) {
+
+					nurbsKnots.push( 0 );
+
+				}
+
+				for ( var i = 0, j = 20; i < j; i ++ ) {
 
 					nurbsControlPoints.push(
-						new THREE.Vector4 (
+						new THREE.Vector4(
 							Math.random() * 400 - 200,
 							Math.random() * 400,
 							Math.random() * 400 - 200,
-							1
+							1 // weight of control point: higher means stronger attraction
 						)
 					);
 
-					var knot = ( i - nurbsDegree ) / ( j - nurbsDegree * 2 );
+					var knot = ( i + 1 ) / ( j - nurbsDegree );
 					nurbsKnots.push( THREE.Math.clamp( knot, 0, 1 ) );
 
 				}