rev |
line source |
nuclear@0
|
1 #define _USE_MATH_DEFINES
|
nuclear@0
|
2 #include <math.h>
|
nuclear@0
|
3 #include "mesh.h"
|
nuclear@0
|
4
|
nuclear@0
|
5 #ifndef M_PI
|
nuclear@0
|
6 #define M_PI 3.14159265359
|
nuclear@0
|
7 #endif
|
nuclear@0
|
8
|
nuclear@0
|
9 void gen_sphere(std::vector<Vertex> &varr, float rad, int usub, int vsub)
|
nuclear@0
|
10 {
|
nuclear@0
|
11 }
|
nuclear@0
|
12
|
nuclear@0
|
13 static void torus_vertex(Vertex *vert, float u, float v, float rad, float tube_rad)
|
nuclear@0
|
14 {
|
nuclear@0
|
15 float theta = 2.0 * M_PI * u;
|
nuclear@0
|
16 float phi = 2.0 * M_PI * v;
|
nuclear@0
|
17
|
nuclear@0
|
18 float x = 0.0f;
|
nuclear@0
|
19 float y = sin(phi) * tube_rad;
|
nuclear@0
|
20 float z = cos(phi) * tube_rad + rad;
|
nuclear@0
|
21
|
nuclear@0
|
22 vert->pos.x = z * sin(theta);
|
nuclear@0
|
23 vert->pos.y = y;
|
nuclear@0
|
24 vert->pos.z = -x * sin(theta) + z * cos(theta);
|
nuclear@0
|
25 vert->pos.w = 1.0;
|
nuclear@0
|
26
|
nuclear@0
|
27 Vector3 cent;
|
nuclear@0
|
28 cent.x = sin(theta) * rad;
|
nuclear@0
|
29 cent.z = cos(theta) * rad;
|
nuclear@0
|
30
|
nuclear@0
|
31 vert->normal = normalize(Vector3(vert->pos) - cent);
|
nuclear@0
|
32 vert->color = Vector4(1.0, 1.0, 1.0, 1.0);
|
nuclear@0
|
33 }
|
nuclear@0
|
34
|
nuclear@0
|
35 void gen_torus(std::vector<Vertex> &varr, float rad, float tube_rad, int usub, int vsub)
|
nuclear@0
|
36 {
|
nuclear@0
|
37 int i, j;
|
nuclear@0
|
38
|
nuclear@0
|
39 if(usub < 3) usub = 3;
|
nuclear@0
|
40 if(vsub < 3) vsub = 3;
|
nuclear@0
|
41
|
nuclear@0
|
42 float du = 1.0f / (float)usub;
|
nuclear@0
|
43 float dv = 1.0f / (float)vsub;
|
nuclear@0
|
44
|
nuclear@0
|
45
|
nuclear@0
|
46 for(i=0; i<usub; i++) {
|
nuclear@0
|
47 float u = (float)i / (float)usub;
|
nuclear@0
|
48 for(j=0; j<vsub; j++) {
|
nuclear@0
|
49 float v = (float)j / (float)vsub;
|
nuclear@0
|
50 Vertex vert[4];
|
nuclear@0
|
51
|
nuclear@0
|
52 torus_vertex(vert, u, v, rad, tube_rad);
|
nuclear@0
|
53 torus_vertex(vert + 1, u, v + dv, rad, tube_rad);
|
nuclear@0
|
54 torus_vertex(vert + 2, u + du, v + dv, rad, tube_rad);
|
nuclear@0
|
55 torus_vertex(vert + 3, u + du, v, rad, tube_rad);
|
nuclear@0
|
56
|
nuclear@0
|
57 varr.push_back(vert[0]);
|
nuclear@0
|
58 varr.push_back(vert[1]);
|
nuclear@0
|
59 varr.push_back(vert[2]);
|
nuclear@0
|
60 varr.push_back(vert[0]);
|
nuclear@0
|
61 varr.push_back(vert[2]);
|
nuclear@0
|
62 varr.push_back(vert[3]);
|
nuclear@0
|
63
|
nuclear@0
|
64 }
|
nuclear@0
|
65 }
|
nuclear@0
|
66 } |