|
@@ -2,7 +2,7 @@
|
|
|
* @author mrdoob / http://mrdoob.com/
|
|
|
*/
|
|
|
|
|
|
-THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded ) {
|
|
|
+THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {
|
|
|
|
|
|
THREE.Geometry.call( this );
|
|
|
|
|
@@ -14,7 +14,9 @@ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegme
|
|
|
height: height,
|
|
|
radialSegments: radialSegments,
|
|
|
heightSegments: heightSegments,
|
|
|
- openEnded: openEnded
|
|
|
+ openEnded: openEnded,
|
|
|
+ thetaStart: thetaStart,
|
|
|
+ thetaLength: thetaLength
|
|
|
};
|
|
|
|
|
|
radiusTop = radiusTop !== undefined ? radiusTop : 20;
|
|
@@ -25,6 +27,8 @@ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegme
|
|
|
heightSegments = heightSegments || 1;
|
|
|
|
|
|
openEnded = openEnded !== undefined ? openEnded : false;
|
|
|
+ thetaStart = thetaStart !== undefined ? thetaStart : 0;
|
|
|
+ thetaLength = thetaLength !== undefined ? thetaLength : 2 * Math.PI;
|
|
|
|
|
|
var heightHalf = height / 2;
|
|
|
|
|
@@ -43,9 +47,9 @@ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegme
|
|
|
var u = x / radialSegments;
|
|
|
|
|
|
var vertex = new THREE.Vector3();
|
|
|
- vertex.x = radius * Math.sin( u * Math.PI * 2 );
|
|
|
+ vertex.x = radius * Math.sin( u * thetaLength + thetaStart );
|
|
|
vertex.y = - v * height + heightHalf;
|
|
|
- vertex.z = radius * Math.cos( u * Math.PI * 2 );
|
|
|
+ vertex.z = radius * Math.cos( u * thetaLength + thetaStart );
|
|
|
|
|
|
this.vertices.push( vertex );
|
|
|
|
|
@@ -141,16 +145,16 @@ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegme
|
|
|
|
|
|
for ( x = 0; x < radialSegments; x ++ ) {
|
|
|
|
|
|
- var v1 = vertices[ y ][ x + 1 ];
|
|
|
- var v2 = vertices[ y ][ x ];
|
|
|
+ var v1 = vertices[ heightSegments ][ x + 1 ];
|
|
|
+ var v2 = vertices[ heightSegments ][ x ];
|
|
|
var v3 = this.vertices.length - 1;
|
|
|
|
|
|
var n1 = new THREE.Vector3( 0, - 1, 0 );
|
|
|
var n2 = new THREE.Vector3( 0, - 1, 0 );
|
|
|
var n3 = new THREE.Vector3( 0, - 1, 0 );
|
|
|
|
|
|
- var uv1 = uvs[ y ][ x + 1 ].clone();
|
|
|
- var uv2 = uvs[ y ][ x ].clone();
|
|
|
+ var uv1 = uvs[ heightSegments ][ x + 1 ].clone();
|
|
|
+ var uv2 = uvs[ heightSegments ][ x ].clone();
|
|
|
var uv3 = new THREE.Vector2( uv2.x, 1 );
|
|
|
|
|
|
this.faces.push( new THREE.Face3( v1, v2, v3, [ n1, n2, n3 ] ) );
|
|
@@ -162,7 +166,7 @@ THREE.CylinderGeometry = function ( radiusTop, radiusBottom, height, radialSegme
|
|
|
|
|
|
this.computeFaceNormals();
|
|
|
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
THREE.CylinderGeometry.prototype = Object.create( THREE.Geometry.prototype );
|
|
|
THREE.CylinderGeometry.prototype.constructor = THREE.CylinderGeometry;
|