- /* -Z */
- NORMAL(vptr, 0, 0, -1);
- COLOR(vptr, 255, 0, 255);
- VERTEX(vptr, hsz, -hsz, -hsz);
- VERTEX(vptr, -hsz, -hsz, -hsz);
- VERTEX(vptr, -hsz, hsz, -hsz);
- VERTEX(vptr, hsz, hsz, -hsz);
- /* -Y */
- NORMAL(vptr, 0, -1, 0);
- COLOR(vptr, 0, 255, 255);
- VERTEX(vptr, -hsz, -hsz, -hsz);
- VERTEX(vptr, hsz, -hsz, -hsz);
- VERTEX(vptr, hsz, -hsz, hsz);
- VERTEX(vptr, -hsz, -hsz, hsz);
- /* -X */
- NORMAL(vptr, -1, 0, 0);
- COLOR(vptr, 255, 255, 0);
- VERTEX(vptr, -hsz, -hsz, -hsz);
- VERTEX(vptr, -hsz, -hsz, hsz);
- VERTEX(vptr, -hsz, hsz, hsz);
- VERTEX(vptr, -hsz, hsz, -hsz);
- /* +X */
- NORMAL(vptr, 1, 0, 0);
- COLOR(vptr, 255, 0, 0);
- VERTEX(vptr, hsz, -hsz, hsz);
- VERTEX(vptr, hsz, -hsz, -hsz);
- VERTEX(vptr, hsz, hsz, -hsz);
- VERTEX(vptr, hsz, hsz, hsz);
- /* +Y */
- NORMAL(vptr, 0, 1, 0);
- COLOR(vptr, 0, 255, 0);
- VERTEX(vptr, -hsz, hsz, hsz);
- VERTEX(vptr, hsz, hsz, hsz);
- VERTEX(vptr, hsz, hsz, -hsz);
- VERTEX(vptr, -hsz, hsz, -hsz);
- /* +Z */
- NORMAL(vptr, 0, 0, 1);
- COLOR(vptr, 0, 0, 255);
- VERTEX(vptr, -hsz, -hsz, hsz);
- VERTEX(vptr, hsz, -hsz, hsz);
- VERTEX(vptr, hsz, hsz, hsz);
- VERTEX(vptr, -hsz, hsz, hsz);
+ v = 0.0f;
+ for(i=0; i<vverts; i++) {
+ y = (v - 0.5) * height;
+ u = 0.0f;
+
+ for(j=0; j<uverts; j++) {
+ x = (u - 0.5) * width;
+
+ vptr->x = x;
+ vptr->y = y;
+ vptr->z = 0.0f;
+ vptr->w = 1.0f;
+ vptr->nx = 0.0f;
+ vptr->ny = 0.0f;
+ vptr->nz = 1.0f;
+ vptr->u = u;
+ vptr->v = v;
+ vptr->r = vptr->g = vptr->b = vptr->a = 255;
+ ++vptr;
+
+ u += du;
+ }
+ v += dv;
+ }
+
+ for(i=0; i<vsub; i++) {
+ for(j=0; j<usub; j++) {
+ int idx = i * uverts + j;
+ *iptr++ = idx;
+ *iptr++ = idx + 1;
+ *iptr++ = idx + uverts + 1;
+ *iptr++ = idx + uverts;
+ }
+ }
+ return 0;
+}
+
+int gen_cube_mesh(struct g3d_mesh *mesh, float sz, int sub)
+{
+ int i;
+ struct g3d_mesh *m;
+ struct g3d_mesh tmpmesh;
+ float xform[16];
+ static float rotface[][4] = {
+ {0, 0, 1, 0},
+ {90, 0, 1, 0},
+ {180, 0, 1, 0},
+ {270, 0, 1, 0},
+ {90, 1, 0, 0},
+ {-90, 1, 0, 0}
+ };
+
+ g3d_matrix_mode(G3D_MODELVIEW);
+ g3d_push_matrix();
+
+ for(i=0; i<6; i++) {
+ m = i > 0 ? &tmpmesh : mesh;
+ if(gen_plane_mesh(m, sz, sz, sub, sub) == -1)
+ return -1;
+ g3d_load_identity();
+ g3d_rotate(rotface[i][0], rotface[i][1], rotface[i][2], rotface[i][3]);
+ g3d_translate(0, 0, sz / 2.0f);
+ g3d_get_matrix(G3D_MODELVIEW, xform);
+ apply_mesh_xform(m, xform);
+ if(i > 0) {
+ if(append_mesh(mesh, m) == -1) {
+ return -1;
+ }
+ }
+ }