|
@@ -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;
|
|
|
|
|
|
}
|
|
|
|