X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fgeom.h;h=7fc183c5a2737e7ec2396bfc0f65163539fed823;hb=59a8deae3d561aa3797a6bf25c76803fe098cdf0;hp=fa492f035e319faf3dd11b26e4df1ebc825167ee;hpb=0b9d8564e9c3785a69829a8faa67f5169185d8fd;p=meshfrac diff --git a/src/geom.h b/src/geom.h index fa492f0..7fc183c 100644 --- a/src/geom.h +++ b/src/geom.h @@ -7,8 +7,30 @@ 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 midplane(struct plane *p, const cgm_vec3 *a, const cgm_vec3 *b, float offs); + +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); + +int poly_poly(const struct poly *p1, const struct poly *p2); #endif /* GEOM_H_ */