source: other-projects/playing-in-the-street/summer-2013/trunk/Playing-in-the-Street-WPF/Content/Web/mrdoob-three.js-4862f5f/src/extras/geometries/ParametricGeometry.js@ 28897

Last change on this file since 28897 was 28897, checked in by davidb, 10 years ago

GUI front-end to server base plus web page content

File size: 1.6 KB
Line 
1/**
2 * @author zz85 / https://github.com/zz85
3 * Parametric Surfaces Geometry
4 * based on the brilliant article by @prideout http://prideout.net/blog/?p=44
5 *
6 * new THREE.ParametricGeometry( parametricFunction, uSegments, ySegements );
7 *
8 */
9
10THREE.ParametricGeometry = function ( func, slices, stacks ) {
11
12 THREE.Geometry.call( this );
13
14 var verts = this.vertices;
15 var faces = this.faces;
16 var uvs = this.faceVertexUvs[ 0 ];
17
18 var i, il, j, p;
19 var u, v;
20
21 var stackCount = stacks + 1;
22 var sliceCount = slices + 1;
23
24 for ( i = 0; i <= stacks; i ++ ) {
25
26 v = i / stacks;
27
28 for ( j = 0; j <= slices; j ++ ) {
29
30 u = j / slices;
31
32 p = func( u, v );
33 verts.push( p );
34
35 }
36 }
37
38 var a, b, c, d;
39 var uva, uvb, uvc, uvd;
40
41 for ( i = 0; i < stacks; i ++ ) {
42
43 for ( j = 0; j < slices; j ++ ) {
44
45 a = i * sliceCount + j;
46 b = i * sliceCount + j + 1;
47 c = (i + 1) * sliceCount + j + 1;
48 d = (i + 1) * sliceCount + j;
49
50 uva = new THREE.Vector2( j / slices, i / stacks );
51 uvb = new THREE.Vector2( ( j + 1 ) / slices, i / stacks );
52 uvc = new THREE.Vector2( ( j + 1 ) / slices, ( i + 1 ) / stacks );
53 uvd = new THREE.Vector2( j / slices, ( i + 1 ) / stacks );
54
55 faces.push( new THREE.Face3( a, b, d ) );
56 uvs.push( [ uva, uvb, uvd ] );
57
58 faces.push( new THREE.Face3( b, c, d ) );
59 uvs.push( [ uvb.clone(), uvc, uvd.clone() ] );
60
61 }
62
63 }
64
65 // console.log(this);
66
67 // magic bullet
68 // var diff = this.mergeVertices();
69 // console.log('removed ', diff, ' vertices by merging');
70
71 this.computeCentroids();
72 this.computeFaceNormals();
73 this.computeVertexNormals();
74
75};
76
77THREE.ParametricGeometry.prototype = Object.create( THREE.Geometry.prototype );
Note: See TracBrowser for help on using the repository browser.