X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgeom.h;h=19c10ff6a1a4e758294a9d42cdaec7b7a4e51764;hb=82bf18c392447827912146ba65145500c9c25385;hp=fa492f035e319faf3dd11b26e4df1ebc825167ee;hpb=0b9d8564e9c3785a69829a8faa67f5169185d8fd;p=meshfrac diff --git a/src/geom.h b/src/geom.h index fa492f0..19c10ff 100644 --- a/src/geom.h +++ b/src/geom.h @@ -7,8 +7,28 @@ struct plane { cgm_vec3 pt, norm; }; +struct vertex { + cgm_vec3 pos, norm; + cgm_vec2 uv; +}; + +struct poly { + struct vertex *verts; /* dynarr */ +}; + float plane_dist(const struct plane *p, const cgm_vec3 *pt); float plane_sdist(const struct plane *p, const cgm_vec3 *pt); void midplane(struct plane *p, const cgm_vec3 *a, const cgm_vec3 *b); +void poly_plane(const struct poly *poly, struct plane *plane); +int plane_poly(const struct plane *plane, struct poly *poly, float size); + +/* returns negative if there's no intersection, parametric distance if there is */ +float ray_plane(const cgm_ray *ray, const struct plane *plane); +float ray_poly(const cgm_ray *ray, const struct poly *poly); + +int init_poly(struct poly *p); +void destroy_poly(struct poly *p); +int clip_poly(struct poly *pout, const struct poly *pin, const struct plane *plane); + #endif /* GEOM_H_ */