|
@@ -28780,149 +28780,149 @@
|
|
|
|
|
|
// ParametricGeometry
|
|
// ParametricGeometry
|
|
|
|
|
|
- function ParametricGeometry( func, slices, stacks ) {
|
|
|
|
|
|
+ function ParametricGeometry( func, slices, stacks ) {
|
|
|
|
|
|
- Geometry.call(this);
|
|
|
|
|
|
+ Geometry.call( this );
|
|
|
|
|
|
- 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();
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- ParametricGeometry.prototype = Object.create( Geometry.prototype );
|
|
|
|
- ParametricGeometry.prototype.constructor = ParametricGeometry;
|
|
|
|
|
|
+ ParametricGeometry.prototype = Object.create( Geometry.prototype );
|
|
|
|
+ ParametricGeometry.prototype.constructor = ParametricGeometry;
|
|
|
|
|
|
// ParametricBufferGeometry
|
|
// ParametricBufferGeometry
|
|
|
|
|
|
- function ParametricBufferGeometry( func, slices, stacks ) {
|
|
|
|
|
|
+ function ParametricBufferGeometry( func, slices, stacks ) {
|
|
|
|
|
|
- BufferGeometry.call(this);
|
|
|
|
-
|
|
|
|
- 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
|
|
|
|
+ };
|
|
|
|
|
|
- var indices = [];
|
|
|
|
- var vertices = [];
|
|
|
|
- var normals = [];
|
|
|
|
- var uvs = [];
|
|
|
|
|
|
+ // buffers
|
|
|
|
|
|
- var EPS = 0.00001;
|
|
|
|
|
|
+ var indices = [];
|
|
|
|
+ var vertices = [];
|
|
|
|
+ var normals = [];
|
|
|
|
+ var uvs = [];
|
|
|
|
|
|
- var normal = new Vector3();
|
|
|
|
|
|
+ var EPS = 0.00001;
|
|
|
|
|
|
- var p0 = new Vector3(), p1 = new Vector3();
|
|
|
|
- var pu = new Vector3(), pv = new Vector3();
|
|
|
|
|
|
+ var normal = new Vector3();
|
|
|
|
|
|
- if ( func.length < 3 ) {
|
|
|
|
|
|
+ var p0 = new Vector3(), p1 = new Vector3();
|
|
|
|
+ var 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
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- var sliceCount = slices + 1;
|
|
|
|
|
|
+ // generate vertices, normals and uvs
|
|
|
|
|
|
- for ( var i = 0; i <= stacks; i ++ ) {
|
|
|
|
|
|
+ var sliceCount = slices + 1;
|
|
|
|
|
|
- var v = i / stacks;
|
|
|
|
|
|
+ for ( var i = 0; i <= stacks; i ++ ) {
|
|
|
|
|
|
- for ( var j = 0; j <= slices; j ++ ) {
|
|
|
|
|
|
+ var v = i / stacks;
|
|
|
|
|
|
- var u = j / slices;
|
|
|
|
|
|
+ for ( var j = 0; j <= slices; j ++ ) {
|
|
|
|
|
|
- // vertex
|
|
|
|
|
|
+ var 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 ( var i$1 = 0; i$1 < stacks; i$1 ++ ) {
|
|
|
|
|
|
+ // generate indices
|
|
|
|
|
|
- for ( var j$1 = 0; j$1 < slices; j$1 ++ ) {
|
|
|
|
|
|
+ for ( var i$1 = 0; i$1 < stacks; i$1 ++ ) {
|
|
|
|
|
|
- var a = i$1 * sliceCount + j$1;
|
|
|
|
- var b = i$1 * sliceCount + j$1 + 1;
|
|
|
|
- var c = ( i$1 + 1 ) * sliceCount + j$1 + 1;
|
|
|
|
- var d = ( i$1 + 1 ) * sliceCount + j$1;
|
|
|
|
|
|
+ for ( var j$1 = 0; j$1 < slices; j$1 ++ ) {
|
|
|
|
|
|
- // faces one and two
|
|
|
|
|
|
+ var a = i$1 * sliceCount + j$1;
|
|
|
|
+ var b = i$1 * sliceCount + j$1 + 1;
|
|
|
|
+ var c = ( i$1 + 1 ) * sliceCount + j$1 + 1;
|
|
|
|
+ var d = ( i$1 + 1 ) * sliceCount + j$1;
|
|
|
|
|
|
- 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;
|
|
|
|
|
|
+ ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );
|
|
|
|
+ ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;
|
|
|
|
|
|
// PolyhedronGeometry
|
|
// PolyhedronGeometry
|
|
|
|
|