gba-x3dtest
diff src/ggen.c @ 12:ecc022a21279
more tuff
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 23 Jun 2014 06:44:04 +0300 |
parents | |
children | 2070a81127f2 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/ggen.c Mon Jun 23 06:44:04 2014 +0300 1.3 @@ -0,0 +1,63 @@ 1.4 +#include <stdlib.h> 1.5 +#include "ggen.h" 1.6 +#include "mesh.h" 1.7 + 1.8 +#define X1 65536 1.9 +#define VERTEX(x, y, z) \ 1.10 + do { \ 1.11 + *vptr++ = x; \ 1.12 + *vptr++ = y; \ 1.13 + *vptr++ = z; \ 1.14 + } while(0) 1.15 + 1.16 +int gen_box(struct mesh *m) 1.17 +{ 1.18 + int num_faces = 8; 1.19 + int num_verts = num_faces * 4; 1.20 + int32_t v[8][3] = { 1.21 + {-X1, -X1, -X1}, {X1, -X1, -X1}, {X1, -X1, X1}, {-X1, -X1, X1}, 1.22 + {-X1, X1, -X1}, {X1, X1, -X1}, {X1, X1, X1}, {-X1, X1, X1} 1.23 + }; 1.24 + int32_t *vptr; 1.25 + 1.26 + 1.27 + m->prim = X3D_QUADS; 1.28 + m->nverts = num_verts; 1.29 + if(!(m->verts = malloc(num_verts * sizeof *m->verts))) { 1.30 + return -1; 1.31 + } 1.32 + vptr = m->verts; 1.33 + 1.34 + /* -Y */ 1.35 + VERTEX(v[0][0], v[0][1], v[0][2]); 1.36 + VERTEX(v[1][0], v[1][1], v[1][2]); 1.37 + VERTEX(v[2][0], v[2][1], v[2][2]); 1.38 + VERTEX(v[3][0], v[3][1], v[3][2]); 1.39 + /* +Y */ 1.40 + VERTEX(v[4][0], v[4][1], v[4][2]); 1.41 + VERTEX(v[5][0], v[5][1], v[5][2]); 1.42 + VERTEX(v[6][0], v[6][1], v[6][2]); 1.43 + VERTEX(v[7][0], v[7][1], v[7][2]); 1.44 + /* -Z */ 1.45 + VERTEX(v[0][0], v[0][1], v[0][2]); 1.46 + VERTEX(v[4][0], v[4][1], v[4][2]); 1.47 + VERTEX(v[5][0], v[5][1], v[5][2]); 1.48 + VERTEX(v[1][0], v[1][1], v[1][2]); 1.49 + /* +Z */ 1.50 + VERTEX(v[2][0], v[2][1], v[2][2]); 1.51 + VERTEX(v[6][0], v[6][1], v[6][2]); 1.52 + VERTEX(v[7][0], v[7][1], v[7][2]); 1.53 + VERTEX(v[3][0], v[3][1], v[3][2]); 1.54 + /* +X */ 1.55 + VERTEX(v[1][0], v[1][1], v[1][2]); 1.56 + VERTEX(v[5][0], v[5][1], v[5][2]); 1.57 + VERTEX(v[6][0], v[6][1], v[6][2]); 1.58 + VERTEX(v[2][0], v[2][1], v[2][2]); 1.59 + /* -X */ 1.60 + VERTEX(v[3][0], v[3][1], v[3][2]); 1.61 + VERTEX(v[7][0], v[7][1], v[7][2]); 1.62 + VERTEX(v[4][0], v[4][1], v[4][2]); 1.63 + VERTEX(v[0][0], v[0][1], v[0][2]); 1.64 + 1.65 + return 0; 1.66 +}