10 struct g3d_vertex *varr;
15 static int init(void);
16 static void destroy(void);
17 static void start(long trans_time);
18 static void draw(void);
19 static void draw_mesh(struct mesh *mesh);
20 static int gen_cube(struct mesh *mesh, float sz);
22 static struct screen scr = {
30 static struct mesh cube;
32 struct screen *polytest_screen(void)
43 static void destroy(void)
48 static void start(long trans_time)
50 g3d_matrix_mode(G3D_PROJECTION);
52 g3d_perspective(50.0, 1.3333333, 0.5, 100.0);
54 g3d_enable(G3D_CULL_FACE);
57 static void draw(void)
59 static int prev_mx, prev_my;
60 static float theta, phi = 25;
62 int dx = mouse_x - prev_mx;
63 int dy = mouse_y - prev_my;
71 if(phi < -90) phi = -90;
72 if(phi > 90) phi = 90;
75 /*float angle = (float)time_msec / 50.0;*/
77 memset(fb_pixels, 0, fb_width * fb_height * 2);
79 g3d_matrix_mode(G3D_MODELVIEW);
81 g3d_translate(0, 0, -5);
82 g3d_rotate(phi, 1, 0, 0);
83 g3d_rotate(theta, 0, 1, 0);
88 static void draw_mesh(struct mesh *mesh)
91 /*g3d_draw_indexed(mesh->prim, mesh->iarr, mesh->icount, mesh->varr);*/
93 g3d_draw(mesh->prim, mesh->varr, mesh->vcount);
97 #define NORMAL(vp, x, y, z) do { vp->nx = x; vp->ny = y; vp->nz = z; } while(0)
98 #define COLOR(vp, cr, cg, cb) do { vp->r = cr; vp->g = cg; vp->b = cb; } while(0)
99 #define TEXCOORD(vp, tu, tv) do { vp->u = tu; vp->v = tv; } while(0)
100 #define VERTEX(vp, vx, vy, vz) \
102 vp->x = vx; vp->y = vy; vp->z = vz; vp->w = 1.0f; \
106 static int gen_cube(struct mesh *mesh, float sz)
108 struct g3d_vertex *vptr;
109 float hsz = sz / 2.0;
111 mesh->prim = G3D_QUADS;
116 if(!(mesh->varr = malloc(mesh->vcount * sizeof *mesh->varr))) {
122 NORMAL(vptr, 0, 0, -1);
123 COLOR(vptr, 255, 0, 255);
124 VERTEX(vptr, hsz, -hsz, -hsz);
125 VERTEX(vptr, -hsz, -hsz, -hsz);
126 VERTEX(vptr, -hsz, hsz, -hsz);
127 VERTEX(vptr, hsz, hsz, -hsz);
129 NORMAL(vptr, 0, -1, 0);
130 COLOR(vptr, 0, 255, 255);
131 VERTEX(vptr, -hsz, -hsz, -hsz);
132 VERTEX(vptr, hsz, -hsz, -hsz);
133 VERTEX(vptr, hsz, -hsz, hsz);
134 VERTEX(vptr, -hsz, -hsz, hsz);
136 NORMAL(vptr, -1, 0, 0);
137 COLOR(vptr, 255, 255, 0);
138 VERTEX(vptr, -hsz, -hsz, -hsz);
139 VERTEX(vptr, -hsz, -hsz, hsz);
140 VERTEX(vptr, -hsz, hsz, hsz);
141 VERTEX(vptr, -hsz, hsz, -hsz);
143 NORMAL(vptr, 1, 0, 0);
144 COLOR(vptr, 255, 0, 0);
145 VERTEX(vptr, hsz, -hsz, hsz);
146 VERTEX(vptr, hsz, -hsz, -hsz);
147 VERTEX(vptr, hsz, hsz, -hsz);
148 VERTEX(vptr, hsz, hsz, hsz);
150 NORMAL(vptr, 0, 1, 0);
151 COLOR(vptr, 0, 255, 0);
152 VERTEX(vptr, -hsz, hsz, hsz);
153 VERTEX(vptr, hsz, hsz, hsz);
154 VERTEX(vptr, hsz, hsz, -hsz);
155 VERTEX(vptr, -hsz, hsz, -hsz);
157 NORMAL(vptr, 0, 0, 1);
158 COLOR(vptr, 0, 0, 255);
159 VERTEX(vptr, -hsz, -hsz, hsz);
160 VERTEX(vptr, hsz, -hsz, hsz);
161 VERTEX(vptr, hsz, hsz, hsz);
162 VERTEX(vptr, -hsz, hsz, hsz);