almost there...
[meshfrac] / src / geom.c
index 67c3c31..25c4d0a 100644 (file)
@@ -223,3 +223,35 @@ int clip_poly(struct poly *pout, const struct poly *pin, const struct plane *pla
        return edges_clipped > 0 ? 0 : 1;
 
 }
+
+int poly_poly(const struct poly *p1, const struct poly *p2)
+{
+       int i, vnum1, vnum2;
+       float t;
+       cgm_ray ray;
+
+       vnum1 = dynarr_size(p1->verts);
+       vnum2 = dynarr_size(p2->verts);
+
+       for(i=0; i<vnum1; i++) {
+               ray.origin = p1->verts[i].pos;
+               ray.dir = p1->verts[(i + 1) & vnum1].pos;
+               cgm_vsub(&ray.dir, &ray.origin);
+
+               if((t = ray_poly(&ray, p2)) >= 0.0f && t <= 1.0f) {
+                       return 1;
+               }
+       }
+
+       for(i=0; i<vnum2; i++) {
+               ray.origin = p2->verts[i].pos;
+               ray.dir = p2->verts[(i + 1) & vnum2].pos;
+               cgm_vsub(&ray.dir, &ray.origin);
+
+               if((t = ray_poly(&ray, p1)) >= 0.0f && t <= 1.0f) {
+                       return 1;
+               }
+       }
+
+       return 0;
+}