Browse Source

CircleGeometry fixed properly now.

Mr.doob 11 years ago
parent
commit
6f9d8407c3
1 changed files with 21 additions and 13 deletions
  1. 21 13
      src/extras/geometries/CircleGeometry.js

+ 21 - 13
src/extras/geometries/CircleGeometry.js

@@ -20,17 +20,21 @@ THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) {
 
 	//
 
-	var indices = new Uint16Array( ( segments + 1 ) * 3 );
-	var vertices = new Float32Array( ( segments + 2 ) * 3 );
-	var normals = new Float32Array( ( segments + 2 ) * 3 );
-	var uvs = new Float32Array( ( segments + 2 ) * 2 );
+	var elements = segments + 2;
+
+	var indices = new Uint16Array( segments * 3 );
+	var vertices = new Float32Array( elements * 3 );
+	var normals = new Float32Array( elements * 3 );
+	var uvs = new Float32Array( elements * 2 );
+
+	// center
 
 	normals[ 2 ] = 1;
 
 	uvs[ 0 ] = 0.5;
 	uvs[ 1 ] = 0.5;
 
-	var offset = 3, offset2 = 2;
+	var offset = 0, offset2 = 2, offset3 = 3;
 
 	for ( var i = 0; i <= segments; i ++ ) {
 
@@ -39,20 +43,24 @@ THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) {
 		var x = radius * Math.cos( segment );
 		var y = radius * Math.sin( segment );
 
-		vertices[ offset     ] = x;
-		vertices[ offset + 1 ] = y;
+		vertices[ offset3     ] = x;
+		vertices[ offset3 + 1 ] = y;
 
-		normals[ offset + 2 ] = 1;
+		normals[ offset3 + 2 ] = 1;
 
 		uvs[ offset2     ] = ( x / radius + 1 ) / 2;
 		uvs[ offset2 + 1 ] = ( y / radius + 1 ) / 2;
 
-		indices[ offset     ] = i + 1;
-		indices[ offset + 1 ] = i + 2;
-		indices[ offset + 2 ] = 0;
-
-		offset += 3;
 		offset2 += 2;
+		offset3 += 3;
+
+		//
+
+		indices[ offset     ] = 0;
+		indices[ offset + 1 ] = i + 1;
+		indices[ offset + 2 ] = i + 2;
+
+		offset  += 3;
 
 	}