提交 5153379a 编写于 作者: M Mr.doob

Merge remote branch 'astrodud/master'

/**
* @author astrodud / http://astrodud.isgreat.org/
*/
function LathedObject( verts, nsteps, latheAngle ) {
THREE.Geometry.call( this );
nsteps = nsteps || 12;
latheAngle = latheAngle || 2 * Math.PI;
var stepSize = latheAngle / nsteps;
var newV = [], oldInds = [], newInds = [], startInds = [];
for ( var j = 0; j < verts.length; j ++ ) {
this.vertices.push( new THREE.Vertex( verts[ j ] ) );
oldInds[ j ] = this.vertices.length - 1;
newV[ j ] = new THREE.Vector3( verts[ j ].x, verts[ j ].y, verts[ j ].z );
}
var m = THREE.Matrix4.rotationZMatrix( stepSize );
for ( var r = 0; r <= latheAngle + 0.001; r += stepSize ) { // need the +0.001 to it go up to latheAngle
for ( var j = 0; j < newV.length; j ++ ) {
if ( r < latheAngle ) {
newV[ j ] = transformVector3( newV[ j ], m );
this.vertices.push( new THREE.Vertex( newV[ j ] ) );
newInds[ j ] = this.vertices.length - 1;
} else {
newInds = startInds; // wrap it up!
}
}
if ( r == 0 ) startInds = oldInds;
for ( var j = 0; j < oldInds.length - 1; j ++ ) {
this.faces.push( new THREE.Face4( newInds[ j ], newInds[ j + 1 ], oldInds[ j + 1 ], oldInds[ j ] ) );
this.uvs.push( [ new THREE.UV( r / latheAngle, j / verts.length ),
new THREE.UV( r / latheAngle, ( j + 1 ) / verts.length ),
new THREE.UV( ( r - stepSize ) / latheAngle, ( j + 1 ) / verts.length ),
new THREE.UV( ( r - stepSize ) / latheAngle, j / verts.length ) ] );
}
oldInds = newInds;
newInds = [];
}
this.computeCentroids();
this.computeFaceNormals();
this.computeVertexNormals();
this.sortFacesByMaterial();
};
LathedObject.prototype = new THREE.Geometry();
LathedObject.prototype.constructor = LathedObject;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册