Browse Source

Merge remote-tracking branch 'hughes/dev' into dev

Mr.doob 13 years ago
parent
commit
068ab90a56
1 changed files with 54 additions and 0 deletions
  1. 54 0
      src/extras/geometries/CircleGeometry.js

+ 54 - 0
src/extras/geometries/CircleGeometry.js

@@ -0,0 +1,54 @@
+/**
+ * @author hughes
+ */
+
+THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) {
+
+    THREE.Geometry.call( this );
+
+    radius = radius || 50;
+
+    thetaStart = thetaStart !== undefined ? thetaStart : 0;
+    thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;
+    segments = segments !== undefined ? Math.max(3, segments) : 8;
+
+    var i, uvs = [],
+    center = new THREE.Vector3(), centerUV = new THREE.UV( 0.5, 0.5 );
+
+    this.vertices.push(center);
+    uvs.push( centerUV );
+
+    for ( i = 0; i <= segments; i ++ ) {
+
+        var vertex = new THREE.Vector3();
+
+        vertex.x = radius * Math.cos( thetaStart + i / segments * thetaLength );
+        vertex.y = radius * Math.sin( thetaStart + i / segments * thetaLength );
+
+        this.vertices.push( vertex );
+        uvs.push( new THREE.UV( ( vertex.x / radius + 1 ) / 2, - ( vertex.y / radius + 1 ) / 2 + 1) );
+
+    }
+
+    var n = new THREE.Vector3(0, 0, -1);
+
+    for ( i=1; i <= segments; i ++ ) {
+
+        var v1 = i;
+        var v2 = i + 1 ;
+        var v3 = 0;
+
+        this.faces.push( new THREE.Face3( v1, v2, v3, [ n, n, n ]));
+        this.faceVertexUvs[ 0 ].push( [ uvs[ i ], uvs[ i + 1 ], centerUV ] );
+
+    }
+
+    this.computeCentroids();
+    this.computeFaceNormals();
+
+    this.boundingSphere = { radius: radius };
+
+};
+
+THREE.CircleGeometry.prototype = new THREE.Geometry();
+THREE.CircleGeometry.prototype.constructor = THREE.CircleGeometry;