X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fmesh.c;h=40b1bb1fee6e098b9f423b70a41353e31c836378;hp=bde8266582351ab0faf95f5c35774e6264e89707;hb=a5c65ceb155188c8acee31a475f8db9f5b58f4b6;hpb=1883deae4194ed84395bfb1102555b803a4f28e2 diff --git a/src/mesh.c b/src/mesh.c index bde8266..40b1bb1 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -6,48 +6,46 @@ #include "3dgfx.h" static struct { + int prim; struct g3d_vertex *varr; const float *xform; } zsort_cls; static int zsort_cmp(const void *aptr, const void *bptr) { + int i; + float za = 0.0f; + float zb = 0.0f; const float *m = zsort_cls.xform; - const struct g3d_vertex *va = (const struct g3d_vertex*)aptr; const struct g3d_vertex *vb = (const struct g3d_vertex*)bptr; - float za = m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - float zb = m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - - ++va; - ++vb; - - za += m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - + for(i=0; ix + m[6] * va->y + m[10] * va->z + m[14]; + zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + ++va; + ++vb; + } return za - zb; } static int zsort_indexed_cmp(const void *aptr, const void *bptr) { + int i; + float za = 0.0f; + float zb = 0.0f; const uint16_t *a = (const uint16_t*)aptr; const uint16_t *b = (const uint16_t*)bptr; const float *m = zsort_cls.xform; - const struct g3d_vertex *va = zsort_cls.varr + a[0]; - const struct g3d_vertex *vb = zsort_cls.varr + b[0]; - - float za = m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - float zb = m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; - - va = zsort_cls.varr + a[2]; - vb = zsort_cls.varr + b[2]; - - za += m[2] * va->x + m[6] * va->y + m[10] * va->z + m[14]; - zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + for(i=0; ix + m[6] * va->y + m[10] * va->z + m[14]; + zb += m[2] * vb->x + m[6] * vb->y + m[10] * vb->z + m[14]; + } return za - zb; } @@ -56,6 +54,7 @@ void zsort_mesh(struct g3d_mesh *m) { zsort_cls.varr = m->varr; zsort_cls.xform = g3d_get_matrix(G3D_MODELVIEW, 0); + zsort_cls.prim = m->prim; if(m->iarr) { int nfaces = m->icount / m->prim; @@ -304,7 +303,6 @@ 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}, @@ -324,8 +322,7 @@ int gen_cube_mesh(struct g3d_mesh *mesh, float sz, int sub) 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); + apply_mesh_xform(m, g3d_get_matrix(G3D_MODELVIEW, 0)); if(i > 0) { if(append_mesh(mesh, m) == -1) { return -1; @@ -394,6 +391,7 @@ int gen_torus_mesh(struct g3d_mesh *mesh, float rad, float ringrad, int usub, in int chess = (i & 1) == (j & 1); torusvec(&vptr->x, theta, phi, rad, ringrad); + vptr->w = 1.0f; vptr->nx = (vptr->x - rcent[0]) / ringrad; vptr->ny = (vptr->y - rcent[1]) / ringrad;