shell mesh
[meshfrac] / src / geom.c
index 81e9df4..67c3c31 100644 (file)
@@ -1,4 +1,5 @@
 #include <stdio.h>
+#include <assert.h>
 #include "geom.h"
 #include "dynarr.h"
 
@@ -31,7 +32,7 @@ void poly_normal(const struct poly *poly, cgm_vec3 *n)
        va = poly->verts[1].pos;
        cgm_vsub(&va, &poly->verts[0].pos);
        vb = poly->verts[2].pos;
-       cgm_vsub(&vb, &poly->verts[2].pos);
+       cgm_vsub(&vb, &poly->verts[0].pos);
 
        cgm_vcross(n, &va, &vb);
        cgm_vnormalize(n);
@@ -130,6 +131,17 @@ float ray_poly(const cgm_ray *ray, const struct poly *poly)
        return t;
 }
 
+int init_poly(struct poly *p)
+{
+       p->verts = dynarr_alloc(0, sizeof *p->verts);
+       assert(p->verts);
+       return p->verts ? 0 : -1;
+}
+
+void destroy_poly(struct poly *p)
+{
+       dynarr_free(p->verts);
+}
 
 /* returns:
  *  1 -> both inside
@@ -196,7 +208,7 @@ int clip_poly(struct poly *pout, const struct poly *pin, const struct plane *pla
        int i, nextidx, res = 0, vnum;
        int edges_clipped = 0;
 
-       dynarr_clear(pout->verts);
+       DYNARR_CLEAR(pout->verts);
 
        vnum = dynarr_size(pin->verts);
        for(i=0; i<vnum; i++) {