Browse Source

Merge pull request #20023 from Mugen87/dev46

ParametricGeometry: Revert class change.
Mr.doob 5 years ago
parent
commit
542a2c6e7f
1 changed files with 83 additions and 85 deletions
  1. 83 85
      src/geometries/ParametricGeometry.js

+ 83 - 85
src/geometries/ParametricGeometry.js

@@ -10,151 +10,149 @@ import { Vector3 } from '../math/Vector3.js';
 
 // ParametricGeometry
 
-class ParametricGeometry extends Geometry {
+function ParametricGeometry( func, slices, stacks ) {
 
-	constructor( func, slices, stacks ) {
+	Geometry.call( this );
 
-		super();
+	this.type = 'ParametricGeometry';
 
-		this.type = 'ParametricGeometry';
+	this.parameters = {
+		func: func,
+		slices: slices,
+		stacks: stacks
+	};
 
-		this.parameters = {
-			func: func,
-			slices: slices,
-			stacks: stacks
-		};
-
-		this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );
-		this.mergeVertices();
-
-	}
+	this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );
+	this.mergeVertices();
 
 }
 
-// ParametricBufferGeometry
-
-class ParametricBufferGeometry extends BufferGeometry {
+ParametricGeometry.prototype = Object.create( Geometry.prototype );
+ParametricGeometry.prototype.constructor = ParametricGeometry;
 
-	constructor( func, slices, stacks ) {
+// ParametricBufferGeometry
 
-		super();
+function ParametricBufferGeometry( func, slices, stacks ) {
 
-		this.type = 'ParametricBufferGeometry';
+	BufferGeometry.call( this );
 
-		this.parameters = {
-			func: func,
-			slices: slices,
-			stacks: stacks
-		};
+	this.type = 'ParametricBufferGeometry';
 
-		// buffers
+	this.parameters = {
+		func: func,
+		slices: slices,
+		stacks: stacks
+	};
 
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
+	// buffers
 
-		const EPS = 0.00001;
+	const indices = [];
+	const vertices = [];
+	const normals = [];
+	const uvs = [];
 
-		const normal = new Vector3();
+	const EPS = 0.00001;
 
-		const p0 = new Vector3(), p1 = new Vector3();
-		const pu = new Vector3(), pv = new Vector3();
+	const normal = new Vector3();
 
-		if ( func.length < 3 ) {
+	const p0 = new Vector3(), p1 = new Vector3();
+	const pu = new Vector3(), pv = new Vector3();
 
-			console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );
+	if ( func.length < 3 ) {
 
-		}
+		console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );
 
-		// generate vertices, normals and uvs
+	}
 
-		const sliceCount = slices + 1;
+	// generate vertices, normals and uvs
 
-		for ( let i = 0; i <= stacks; i ++ ) {
+	const sliceCount = slices + 1;
 
-			const v = i / stacks;
+	for ( let i = 0; i <= stacks; i ++ ) {
 
-			for ( let j = 0; j <= slices; j ++ ) {
+		const v = i / stacks;
 
-				const u = j / slices;
+		for ( let j = 0; j <= slices; j ++ ) {
 
-				// vertex
+			const u = j / slices;
 
-				func( u, v, p0 );
-				vertices.push( p0.x, p0.y, p0.z );
+			// vertex
 
-				// normal
+			func( u, v, p0 );
+			vertices.push( p0.x, p0.y, p0.z );
 
-				// approximate tangent vectors via finite differences
+			// normal
 
-				if ( u - EPS >= 0 ) {
+			// approximate tangent vectors via finite differences
 
-					func( u - EPS, v, p1 );
-					pu.subVectors( p0, p1 );
+			if ( u - EPS >= 0 ) {
 
-				} else {
+				func( u - EPS, v, p1 );
+				pu.subVectors( p0, p1 );
 
-					func( u + EPS, v, p1 );
-					pu.subVectors( p1, p0 );
+			} else {
 
-				}
+				func( u + EPS, v, p1 );
+				pu.subVectors( p1, p0 );
 
-				if ( v - EPS >= 0 ) {
+			}
 
-					func( u, v - EPS, p1 );
-					pv.subVectors( p0, p1 );
+			if ( v - EPS >= 0 ) {
 
-				} else {
+				func( u, v - EPS, p1 );
+				pv.subVectors( p0, p1 );
 
-					func( u, v + EPS, p1 );
-					pv.subVectors( p1, p0 );
+			} else {
 
-				}
+				func( u, v + EPS, p1 );
+				pv.subVectors( p1, p0 );
 
-				// cross product of tangent vectors returns surface normal
+			}
 
-				normal.crossVectors( pu, pv ).normalize();
-				normals.push( normal.x, normal.y, normal.z );
+			// cross product of tangent vectors returns surface normal
 
-				// uv
+			normal.crossVectors( pu, pv ).normalize();
+			normals.push( normal.x, normal.y, normal.z );
 
-				uvs.push( u, v );
+			// uv
 
-			}
+			uvs.push( u, v );
 
 		}
 
-		// generate indices
+	}
 
-		for ( let i = 0; i < stacks; i ++ ) {
+	// generate indices
 
-			for ( let j = 0; j < slices; j ++ ) {
+	for ( let i = 0; i < stacks; i ++ ) {
 
-				const a = i * sliceCount + j;
-				const b = i * sliceCount + j + 1;
-				const c = ( i + 1 ) * sliceCount + j + 1;
-				const d = ( i + 1 ) * sliceCount + j;
+		for ( let j = 0; j < slices; j ++ ) {
 
-				// faces one and two
+			const a = i * sliceCount + j;
+			const b = i * sliceCount + j + 1;
+			const c = ( i + 1 ) * sliceCount + j + 1;
+			const d = ( i + 1 ) * sliceCount + j;
 
-				indices.push( a, b, d );
-				indices.push( b, c, d );
+			// faces one and two
 
-			}
+			indices.push( a, b, d );
+			indices.push( b, c, d );
 
 		}
 
-		// build geometry
+	}
 
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
+	// build geometry
 
-	}
+	this.setIndex( indices );
+	this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
+	this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
+	this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
 
 }
 
+ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );
+ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;
+
 
 export { ParametricGeometry, ParametricBufferGeometry };