|
2 | 2 | * @author kile / http://kile.stravaganza.org/
|
3 | 3 | */
|
4 | 4 |
|
5 |
| -var Cylinder = function (numSegs, topRad, botRad, height, topOffset, botOffset) { |
| 5 | +var Cylinder = function ( numSegs, topRad, botRad, height, topOffset, botOffset ) { |
6 | 6 |
|
7 |
| - THREE.Geometry.call(this); |
| 7 | + THREE.Geometry.call( this ); |
8 | 8 |
|
9 |
| - var scope = this, i; |
| 9 | + var scope = this, |
| 10 | + pi = Math.PI, i; |
10 | 11 |
|
11 | 12 | // VERTICES
|
12 | 13 |
|
13 | 14 | // Top circle vertices
|
14 |
| - for (i = 0; i < numSegs; i++) { |
| 15 | + for ( i = 0; i < numSegs; i ++ ) { |
| 16 | + |
| 17 | + v( Math.sin( 2 * pi * i / numSegs ) * topRad, Math.cos( 2 * pi * i / numSegs ) * topRad, 0 ); |
15 | 18 |
|
16 |
| - v( |
17 |
| - Math.sin(2 * 3.1415 * i / numSegs)*topRad, |
18 |
| - Math.cos(2 * 3.1415 * i / numSegs)*topRad, |
19 |
| - 0); |
20 | 19 | }
|
21 | 20 |
|
22 | 21 | // Bottom circle vertices
|
23 |
| - for (i = 0; i < numSegs; i++) { |
| 22 | + for ( i = 0; i < numSegs; i ++ ) { |
| 23 | + |
| 24 | + v( Math.sin( 2 * pi * i / numSegs ) * botRad, Math.cos( 2 * pi * i / numSegs ) * botRad, height ); |
24 | 25 |
|
25 |
| - v( |
26 |
| - Math.sin(2 * 3.1415 * i / numSegs)*botRad, |
27 |
| - Math.cos(2 * 3.1415 * i / numSegs)*botRad, |
28 |
| - height); |
29 | 26 | }
|
30 | 27 |
|
31 | 28 |
|
32 | 29 | // FACES
|
33 | 30 |
|
34 |
| - // Body |
35 |
| - for (i = 0; i < numSegs; i++) { |
| 31 | + // Body |
| 32 | + for ( i = 0; i < numSegs; i++ ) { |
36 | 33 |
|
37 |
| - f4(i, i + numSegs, numSegs + (i + 1) % numSegs, (i + 1) % numSegs, '#ff0000'); |
| 34 | + f4( i, i + numSegs, numSegs + ( i + 1 ) % numSegs, ( i + 1 ) % numSegs, '#ff0000' ); |
38 | 35 | }
|
39 | 36 |
|
40 | 37 | // Bottom circle
|
41 |
| - if (botRad != 0) { |
| 38 | + if ( botRad != 0 ) { |
| 39 | + |
| 40 | + v( 0, 0, - topOffset ); |
42 | 41 |
|
43 |
| - v(0, 0, -topOffset); |
| 42 | + for ( i = numSegs; i < numSegs + ( numSegs / 2 ); i++ ) { |
44 | 43 |
|
45 |
| - for (i = numSegs; i < numSegs + (numSegs / 2); i++) { |
| 44 | + f4( 2 * numSegs, ( 2 * i - 2 * numSegs ) % numSegs, ( 2 * i - 2 * numSegs + 1 ) % numSegs, ( 2 * i - 2 * numSegs + 2 ) % numSegs ); |
46 | 45 |
|
47 |
| - f4(2 * numSegs, |
48 |
| - (2 * i - 2 * numSegs) % numSegs, |
49 |
| - (2 * i - 2 * numSegs + 1) % numSegs, |
50 |
| - (2 * i - 2 * numSegs + 2) % numSegs); |
51 | 46 | }
|
| 47 | + |
52 | 48 | }
|
53 | 49 |
|
54 | 50 | // Top circle
|
55 |
| - if (topRad != 0) { |
| 51 | + if ( topRad != 0 ) { |
| 52 | + |
| 53 | + v( 0, 0, height + topOffset ); |
56 | 54 |
|
57 |
| - v(0, 0, height + topOffset); |
| 55 | + for ( i = numSegs + ( numSegs / 2 ); i < 2 * numSegs; i ++ ) { |
58 | 56 |
|
59 |
| - for (i = numSegs + (numSegs / 2); i < 2 * numSegs; i++) { |
| 57 | + f4( ( 2 * i - 2 * numSegs + 2 ) % numSegs + numSegs, ( 2 * i - 2 * numSegs + 1 ) % numSegs + numSegs, ( 2 * i - 2 * numSegs ) % numSegs+numSegs, 2 * numSegs + 1 ); |
60 | 58 |
|
61 |
| - f4( (2 * i - 2 * numSegs + 2) % numSegs + numSegs, |
62 |
| - (2 * i - 2 * numSegs + 1) % numSegs + numSegs, |
63 |
| - (2 * i - 2 * numSegs) % numSegs+numSegs, |
64 |
| - 2 * numSegs + 1); |
65 | 59 | }
|
| 60 | + |
66 | 61 | }
|
67 | 62 |
|
68 | 63 | this.computeCentroids();
|
69 |
| - this.computeNormals(); |
| 64 | + this.computeFaceNormals(); |
70 | 65 | this.sortFacesByMaterial();
|
71 | 66 |
|
72 |
| - function v(x, y, z) { |
| 67 | + function v( x, y, z ) { |
73 | 68 |
|
74 | 69 | scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x, y, z ) ) );
|
| 70 | + |
75 | 71 | }
|
76 | 72 |
|
77 |
| - function f4(a, b, c, d) { |
| 73 | + function f4( a, b, c, d ) { |
78 | 74 |
|
79 | 75 | scope.faces.push( new THREE.Face4( a, b, c, d ) );
|
| 76 | + |
80 | 77 | }
|
| 78 | + |
81 | 79 | }
|
82 | 80 |
|
83 | 81 | Cylinder.prototype = new THREE.Geometry();
|
|
0 commit comments