diff --git a/build/three.js b/build/three.js index c7879e3771cd2354b830f393bb94f0679e7b50a1..f28541fe2aac91e5563069498510b1da6d67b972 100644 --- a/build/three.js +++ b/build/three.js @@ -31719,55 +31719,74 @@ THREE.ShapeGeometry.prototype.addShape = function ( shape, options ) { /** * @author astrodud / http://astrodud.isgreat.org/ * @author zz85 / https://github.com/zz85 + * @author bhouston / http://exocortex.com */ -THREE.LatheGeometry = function ( points, steps, angle ) { +// points - to create a closed torus, one must use a set of points +// like so: [ a, b, c, d, a ], see first is the same as last. +// segments - the number of circumference segments to create +// phiStart - the starting radian +// phiLength - the radian (0 to 2*PI) range of the lathed section +// 2*pi is a closed lathe, less than 2PI is a portion. +THREE.LatheGeometry = function ( points, segments, phiStart, phiLength ) { THREE.Geometry.call( this ); - var _steps = steps || 12; - var _angle = angle || 2 * Math.PI; + segments = segments || 12; + phiStart = phiStart || 0; + phiLength = phiLength || 2 * Math.PI; - var _newV = []; - var _matrix = new THREE.Matrix4().makeRotationZ( _angle / _steps ); + var inversePointLength = 1.0 / points.length; + var inverseSegments = 1.0 / segments; - for ( var j = 0; j < points.length; j ++ ) { + for ( var i = 0, il = segments; i <= il; i ++ ) { - _newV[ j ] = points[ j ].clone(); - this.vertices.push( _newV[ j ] ); + var phi = phiStart + i * inverseSegments * phiLength; - } + var c = Math.cos( phi ), + s = Math.sin( phi ); - var i, il = _steps + 1; + for ( var j = 0, jl = points.length; j < jl; j ++ ) { - for ( i = 0; i < il; i ++ ) { + var pt = points[ j ]; + + var vertex = new THREE.Vector3(); - for ( var j = 0; j < _newV.length; j ++ ) { + vertex.x = c * pt.x - s * pt.y; + vertex.y = s * pt.x + c * pt.y; + vertex.z = pt.z; - _newV[ j ] = _newV[ j ].clone().applyMatrix4( _matrix ); - this.vertices.push( _newV[ j ] ); + this.vertices.push( vertex ); } } - for ( i = 0; i < _steps; i ++ ) { + var np = points.length; - for ( var k = 0, kl = points.length; k < kl - 1; k ++ ) { + for ( var i = 0, il = segments; i < il; i ++ ) { - var a = i * kl + k; - var b = ( ( i + 1 ) % il ) * kl + k; - var c = ( ( i + 1 ) % il ) * kl + ( k + 1 ) % kl; - var d = i * kl + ( k + 1 ) % kl; + for ( var j = 0, jl = points.length - 1; j < jl; j ++ ) { + + var base = j + np * i; + var a = base; + var b = base + np; + var c = base + 1 + np; + var d = base + 1; this.faces.push( new THREE.Face4( a, b, c, d ) ); + var u0 = 1 - i * inverseSegments; + var v0 = j * inversePointLength; + var u1 = u0 - inverseSegments; + var v1 = v0 + inversePointLength; + this.faceVertexUvs[ 0 ].push( [ - new THREE.Vector2( 1 - i / _steps, k / kl ), - new THREE.Vector2( 1 - ( i + 1 ) / _steps, k / kl ), - new THREE.Vector2( 1 - ( i + 1 ) / _steps, ( k + 1 ) / kl ), - new THREE.Vector2( 1 - i / _steps, ( k + 1 ) / kl ) + new THREE.Vector2( u0, v0 ), + new THREE.Vector2( u1, v0 ), + new THREE.Vector2( u1, v1 ), + new THREE.Vector2( u0, v1 ) ] ); diff --git a/build/three.min.js b/build/three.min.js index 8c9af6d50114e36d101888d94a0b49d9068377cd..70484f6389b17da854ef4855f7cce90f3f7a14e1 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -609,8 +609,8 @@ THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d,e,f){b=a. m=a.vertices[g].y,g=a.vertices[g].z,p=a.vertices[h].x,n=a.vertices[h].y,a=a.vertices[h].z;return 0.01>Math.abs(c-i)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(k,1-g),new THREE.Vector2(p,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(i,1-f),new THREE.Vector2(m,1-g),new THREE.Vector2(n,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2; THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c