Files
FC1/CryPhysics/intersectionchecks.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

55 lines
3.7 KiB
C++

#ifndef intersectionchecks_h
#define intersectionchecks_h
typedef int (*intersection_check)(const primitive*,const primitive*,prim_inters*);
int default_intersection(const primitive*,const primitive*, prim_inters *pinters);
int tri_tri_intersection(const triangle *ptri1, const triangle *ptri2, prim_inters *pinters);
int tri_box_intersection(const triangle *ptri, const box *pbox, prim_inters *pinters);
int box_tri_intersection(const box *pbox, const triangle *ptri, prim_inters *pinters);
int tri_cylinder_intersection(const triangle *ptri, const cylinder *pcyl, prim_inters *pinters);
int cylinder_tri_intersection(const cylinder *pcyl, const triangle *ptri, prim_inters *pinters);
int tri_sphere_intersection(const triangle *ptri, const sphere *psphere, prim_inters *pinters);
int sphere_tri_intersection(const sphere *psphere, const triangle *ptri, prim_inters *pinters);
int tri_ray_intersection(const triangle *ptri, const ray *pray, prim_inters *pinters);
int ray_tri_intersection(const ray *pray, const triangle *ptri, prim_inters *pinters);
int tri_plane_intersection(const triangle *ptri, const plane *pplane, prim_inters *pinters);
int plane_tri_intersection(const plane *pplane, const triangle *ptri, prim_inters *pinters);
int box_box_intersection(const box *pbox1, const box *pbox2, prim_inters *pinters);
int box_cylinder_intersection(const box *pbox, const cylinder *pcyl, prim_inters *pinters);
int cylinder_box_intersection(const cylinder *pcyl, const box *pbox, prim_inters *pinters);
int box_sphere_intersection(const box *pbox, const sphere *psphere, prim_inters *pinters);
int sphere_box_intersection(const sphere *psphere, const box *pbox, prim_inters *pinters);
int box_ray_intersection(const box *pbox, const ray *pray, prim_inters *pinters);
int ray_box_intersection(const ray *pray, const box *pbox, prim_inters *pinters);
int box_plane_intersection(const box *pbox, const plane *pplane, prim_inters *pinters);
int plane_box_intersection(const plane *pplane, const box *pbox, prim_inters *pinters);
int cylinder_cylinder_intersection(const cylinder *pcyl1, const cylinder *pcyl2, prim_inters *pinters);
int cylinder_sphere_intersection(const cylinder *pcyl, const sphere *psphere, prim_inters *pinters);
int sphere_cylinder_intersection(const sphere *psphere, const cylinder *pcyl, prim_inters *pinters);
int cylinder_ray_intersection(const cylinder *pcyl, const ray *pray, prim_inters *pinters);
int ray_cylinder_intersection(const ray *pray, const cylinder *pcyl, prim_inters *pinters);
int cylinder_plane_intersection(const cylinder *pcyl, const plane *pplane, prim_inters *pinters);
int plane_cylinder_intersection(const plane *pplane, const cylinder *pcyl, prim_inters *pinters);
int sphere_sphere_intersection(const sphere *psphere1, const sphere *psphere2, prim_inters *pinters);
int sphere_ray_intersection(const sphere *psphere, const ray *pray, prim_inters *pinters);
int ray_sphere_intersection(const ray *pray, const sphere *psphere, prim_inters *pinters);
int sphere_plane_intersection(const sphere *psphere, const plane *pplane, prim_inters *pinters);
int plane_sphere_intersection(const plane *pplane, const sphere *psphere, prim_inters *pinters);
int ray_plane_intersection(const ray *pray, const plane *pplane, prim_inters *pinters);
int plane_ray_intersection(const plane *pplane, const ray *pray, prim_inters *pinters);
class CIntersectionChecker {
public:
CIntersectionChecker();
int Check(int type1,int type2, const primitive* prim1,const primitive *prim2, prim_inters* pinters) {
return table[type1][type2](prim1,prim2, pinters);
}
int CheckExists(int type1,int type2) {
return table[type1][type2]!=default_intersection;
}
intersection_check table[NPRIMS][NPRIMS];
};
extern CIntersectionChecker g_Intersector;
#endif