gba-x3dtest
view src/ggen.c @ 14:c398d834d64a
fixed the rendering bugs
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 23 Jun 2014 10:33:24 +0300 |
parents | 2070a81127f2 |
children | b755fb002f17 |
line source
1 #include <stdlib.h>
2 #include "ggen.h"
3 #include "mesh.h"
5 #define X1 65536
6 #define VERTEX(x, y, z) \
7 do { \
8 *vptr++ = x; \
9 *vptr++ = y; \
10 *vptr++ = z; \
11 } while(0)
13 #define COLOR(r, g, b) \
14 do { \
15 *cptr++ = r; \
16 *cptr++ = g; \
17 *cptr++ = b; \
18 } while(0)
20 int gen_box(struct mesh *m)
21 {
22 int i;
23 int num_faces = 12;
24 int num_verts = num_faces * 3;
25 int32_t v[8][3] = {
26 {-X1, -X1, -X1}, {X1, -X1, -X1}, {X1, -X1, X1}, {-X1, -X1, X1},
27 {-X1, X1, -X1}, {X1, X1, -X1}, {X1, X1, X1}, {-X1, X1, X1}
28 };
29 int32_t *vptr, *cptr;
32 m->prim = X3D_TRIANGLES;
33 m->nverts = num_verts;
34 if(!(m->verts = malloc(num_verts * 3 * sizeof *m->verts))) {
35 return -1;
36 }
37 vptr = m->verts;
39 if(!(m->colors = malloc(num_verts * 3 * sizeof *m->colors))) {
40 return -1;
41 }
42 cptr = m->colors;
44 /* -Y */
45 VERTEX(v[0][0], v[0][1], v[0][2]);
46 VERTEX(v[1][0], v[1][1], v[1][2]);
47 VERTEX(v[2][0], v[2][1], v[2][2]);
48 for(i=0; i<3; i++) COLOR(32768, 0, 32768);
50 VERTEX(v[0][0], v[0][1], v[0][2]);
51 VERTEX(v[2][0], v[2][1], v[2][2]);
52 VERTEX(v[3][0], v[3][1], v[3][2]);
53 for(i=0; i<3; i++) COLOR(65536, 0, 65536);
55 /* +Y */
56 VERTEX(v[7][0], v[7][1], v[7][2]);
57 VERTEX(v[6][0], v[6][1], v[6][2]);
58 VERTEX(v[5][0], v[5][1], v[5][2]);
59 for(i=0; i<3; i++) COLOR(0, 32768, 0);
61 VERTEX(v[7][0], v[7][1], v[7][2]);
62 VERTEX(v[5][0], v[5][1], v[5][2]);
63 VERTEX(v[4][0], v[4][1], v[4][2]);
64 for(i=0; i<3; i++) COLOR(0, 65536, 0);
66 /* -Z */
67 VERTEX(v[0][0], v[0][1], v[0][2]);
68 VERTEX(v[4][0], v[4][1], v[4][2]);
69 VERTEX(v[5][0], v[5][1], v[5][2]);
70 for(i=0; i<3; i++) COLOR(32768, 32768, 0);
72 VERTEX(v[0][0], v[0][1], v[0][2]);
73 VERTEX(v[5][0], v[5][1], v[5][2]);
74 VERTEX(v[1][0], v[1][1], v[1][2]);
75 for(i=0; i<3; i++) COLOR(65536, 65536, 0);
77 /* +Z */
78 VERTEX(v[2][0], v[2][1], v[2][2]);
79 VERTEX(v[6][0], v[6][1], v[6][2]);
80 VERTEX(v[7][0], v[7][1], v[7][2]);
81 for(i=0; i<3; i++) COLOR(0, 0, 32768);
83 VERTEX(v[2][0], v[2][1], v[2][2]);
84 VERTEX(v[7][0], v[7][1], v[7][2]);
85 VERTEX(v[3][0], v[3][1], v[3][2]);
86 for(i=0; i<3; i++) COLOR(0, 0, 65536);
88 /* +X */
89 VERTEX(v[1][0], v[1][1], v[1][2]);
90 VERTEX(v[5][0], v[5][1], v[5][2]);
91 VERTEX(v[6][0], v[6][1], v[6][2]);
92 for(i=0; i<3; i++) COLOR(32768, 0, 0);
94 VERTEX(v[1][0], v[1][1], v[1][2]);
95 VERTEX(v[6][0], v[6][1], v[6][2]);
96 VERTEX(v[2][0], v[2][1], v[2][2]);
97 for(i=0; i<3; i++) COLOR(65536, 0, 0);
99 /* -X */
100 VERTEX(v[3][0], v[3][1], v[3][2]);
101 VERTEX(v[7][0], v[7][1], v[7][2]);
102 VERTEX(v[4][0], v[4][1], v[4][2]);
103 for(i=0; i<3; i++) COLOR(0, 32768, 32768);
105 VERTEX(v[3][0], v[3][1], v[3][2]);
106 VERTEX(v[4][0], v[4][1], v[4][2]);
107 VERTEX(v[0][0], v[0][1], v[0][2]);
108 for(i=0; i<3; i++) COLOR(0, 65536, 65536);
110 return 0;
111 }