Browse Source

Merge remote-tracking branch 'zz85/master' into dev

Mr.doob 13 years ago
parent
commit
535848c84d

+ 74 - 67
src/extras/geometries/ParametricGeometries.js

@@ -3,6 +3,80 @@
  * 
  * Experimenting of primitive geometry creation using Surface Parametric equations
  */
+
+
+var sin = Math.sin, cos = Math.cos, pi = Math.PI;
+
+THREE.ParametricGeometries = {
+	
+	klein: function (v, u) {
+		u *= pi;
+		v *= 2 * pi;
+
+		u = u * 2;
+		var x, y, z;
+		if (u < pi) {
+			x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(u) * cos(v);
+			z = -8 * sin(u) - 2 * (1 - cos(u) / 2) * sin(u) * cos(v);
+		} else {
+			x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(v + pi);
+			z = -8 * sin(u);
+		}
+	  
+		y = -2 * (1 - cos(u) / 2) * sin(v);
+		
+		return new THREE.Vector3(x, y, z);
+	},
+
+	plane: function (width, height) {
+		
+		return function(u, v) {
+			var x = u * width;
+			var y = 0; 
+			var z = v * height;
+
+			console.log(x, y, z);
+
+			return new THREE.Vector3(x, y, z);
+		};
+	},
+
+	mobius: function(u, t) {
+
+		// flat mobius strip
+		// http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
+		u = u - 0.5;
+		var v = 2 * pi * t;
+
+		var x, y, z;
+
+		var a = 2;
+		x = cos(v) * (a + u * cos(v/2));
+		y = sin(v) * (a + u * cos(v/2));
+		z = u * sin(v/2);
+		return new THREE.Vector3(x, y, z);
+
+	},
+
+	mobius3d: function(u, t) {
+
+		// volumetric mobius strip
+		u *= pi;
+		t *= 2 * pi;
+
+		u = u * 2
+		var phi = u / 2
+		var major = 2.25, a = 0.125, b = 0.65;
+		var x, y, z;
+		x = a * cos(t) * cos(phi) - b * sin(t) * sin(phi);
+		z = a * cos(t) * sin(phi) + b * sin(t) * cos(phi);
+		y = (major + x) * sin(u);
+		x = (major + x) * cos(u);
+		return new THREE.Vector3(x, y, z);
+	}
+
+};
+
 THREE.TubeGeometry2 = function(path, segments, radius, segmentsRadius, closed, debug) {
 
 	this.path = path;
@@ -121,73 +195,6 @@ THREE.TubeGeometry2.prototype.constructor = THREE.TubeGeometry2;
 THREE.TorusKnotGeometry2.prototype = new THREE.Geometry();
 THREE.TorusKnotGeometry2.prototype.constructor = THREE.TorusKnotGeometry2;
 
- var sin = Math.sin, cos = Math.cos, pi = Math.PI;
-
-THREE.ParametricGeometries = {
-	klein: function (v, u) {
-		u *= pi;
-		v *= 2 * pi;
-
-		u = u * 2;
-		var x, y, z;
-		if (u < pi) {
-			x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(u) * cos(v);
-			z = -8 * sin(u) - 2 * (1 - cos(u) / 2) * sin(u) * cos(v);
-		} else {
-			x = 3 * cos(u) * (1 + sin(u)) + (2 * (1 - cos(u) / 2)) * cos(v + pi);
-			z = -8 * sin(u);
-		}
-	  
-		y = -2 * (1 - cos(u) / 2) * sin(v);
-		
-		return new THREE.Vector3(x, y, z);
-	},
-
-	plane: function (width, height) {
-		
-		return function(u, v) {
-			var x = u * width;
-			var y = 0; 
-			var z = v * height;
-
-			console.log(x, y, z);
-
-			return new THREE.Vector3(x, y, z);
-		};
-	},
-
-	mobius: function(u, t) {
-
-		// flat mobius strip
-		// http://www.wolframalpha.com/input/?i=M%C3%B6bius+strip+parametric+equations&lk=1&a=ClashPrefs_*Surface.MoebiusStrip.SurfaceProperty.ParametricEquations-
-		// u = u - 0.5;
-		// var v = 2 * pi * t;
-
-		// var x, y, z;
-
-		// var a = 2;
-		// x = cos(v) * (a + u * cos(v/2));
-		// y = sin(v) * (a + u * cos(v/2));
-		// z = u * sin(v/2);
-		// return new THREE.Vector3(x, y, z);
-
-		// volumetric mobius strip
-		u *= pi;
-		t *= 2 * pi;
-
-		u = u * 2
-		var phi = u / 2
-		var major = 2.25, a = 0.125, b = 0.65;
-		var x, y, z;
-		x = a * cos(t) * cos(phi) - b * sin(t) * sin(phi);
-		z = a * cos(t) * sin(phi) + b * sin(t) * cos(phi);
-		y = (major + x) * sin(u);
-		x = (major + x) * cos(u);
-		return new THREE.Vector3(x, y, z);
-	}
-
-};
-
 
 THREE.SphereGeometry2 = function(size, x, y) {
 

+ 8 - 5
src/extras/geometries/ParametricGeometry.js

@@ -2,9 +2,12 @@
  * @author zz85 / https://github.com/zz85
  * Parametric Surfaces Geometry
  * based on the brilliant article by @prideout http://prideout.net/blog/?p=44
+ *
+ * new THREE.ParametricGeometry( parametricFunction, uSements, ySegements, useTris );
+ *
  */
 
-THREE.ParametricGeometry = function ( func, slices, stacks, face4 ) {
+THREE.ParametricGeometry = function ( func, slices, stacks, useTris ) {
 
 	THREE.Geometry.call( this );
 
@@ -12,7 +15,7 @@ THREE.ParametricGeometry = function ( func, slices, stacks, face4 ) {
 	var faces = this.faces;
 	var uvs = this.faceVertexUvs[ 0 ];
 
-	var useFace3 = (face4 === undefined) ? true : !face4;
+	useTris = (useTris === undefined) ? false : useTris;
 
 	var i, il, j, p;
 	var u, v;
@@ -50,7 +53,7 @@ THREE.ParametricGeometry = function ( func, slices, stacks, face4 ) {
 			uvc = new THREE.UV( ( i + 1 ) / slices, j / stacks );
 			uvd = new THREE.UV( ( i + 1 ) / slices, ( j + 1 ) / stacks );
 
-			if ( useFace3 ) {
+			if ( useTris ) {
 
 				faces.push( new THREE.Face3( a, b, c ) );
 				faces.push( new THREE.Face3( b, d, c ) );
@@ -72,8 +75,8 @@ THREE.ParametricGeometry = function ( func, slices, stacks, face4 ) {
 	// console.log(this);
 
 	// magic bullet
-	var diff = this.mergeVertices();
-	console.log('removed ', diff, ' vertices by merging');
+	// var diff = this.mergeVertices();
+	// console.log('removed ', diff, ' vertices by merging');
 	
 	this.computeCentroids();
 	this.computeFaceNormals();