28 #ifndef __FREEWRL_COLLISION_H__
29 #define __FREEWRL_COLLISION_H__
40 #include <CL/opencl.h>
43 #include <CL/opencl.h>
57 #define PR_DOUBLESIDED 0x01
58 #define PR_FRONTFACING 0x02
59 #define PR_BACKFACING 0x04
60 #define PR_NOSTEPING 0x08
67 polyrep_disp_rec(double y1,
85 int fast_ycylinder_box_intersect(
double y1,
double y2,
double r,
struct point_XYZ pcenter,
double xs,
double ys,
double zs);
90 int fast_ycylinder_cone_intersect(
double y1,
double y2,
double r,
struct point_XYZ pcenter,
double halfheight,
double baseradius);
94 struct point_XYZ cone_disp(double y1, double y2, double ydisp, double r, struct
point_XYZ base, struct
point_XYZ top, double baseradius);
98 struct point_XYZ cylinder_disp(double y1, double y2, double ydisp, double r, struct
point_XYZ base, struct
point_XYZ top, double baseradius);
104 struct point_XYZ planar_polyrep_disp(double y1, double y2, double ydisp, double r, struct
X3D_PolyRep pr, GLDOUBLE* mat, prflags flags,
struct point_XYZ n);
111 #ifdef DEBUG_SCENE_EXPORT
112 void printpolyrep(
struct X3D_PolyRep pr,
int npoints);
114 void printmatrix(GLDOUBLE* mat);
120 struct sCollisionGPU {
121 cl_program CollideGPU_program;
122 cl_kernel CollideGPU_kernel;
123 size_t CollideGPU_workgroup_size;
124 int CollideGPU_output_size;
125 cl_mem CollideGPU_output_buffer;
126 cl_mem CollideGPU_matrix_buffer;
127 cl_mem CollideGPU_vertex_buffer;
128 cl_mem CollideGPU_index_buffer;
135 #define VIEWER_WALK 2
152 GLDOUBLE collision2avatar[16], avatar2collision[16];
156 int checkPenetration;
160 GLDOUBLE penMin[3], penMax[3];
167 int fast_ycylinder_box_intersect(
double y1,
double y2,
double r,
struct point_XYZ pcenter,
double xs,
double ys,
double zs);
168 int fast_sphere_MBB_intersect_shapeSpace(
double r, GLDOUBLE *collision2shape, GLDOUBLE *shapeMBBmin, GLDOUBLE *shapeMBBmax );
169 int fast_ycylinder_MBB_intersect_shapeSpace(
double y1,
double y2,
double r, GLDOUBLE *collision2shape, GLDOUBLE *shapeMBBmin, GLDOUBLE *shapeMBBmax );
170 int fast_ycylinder_MBB_intersect_collisionSpace(
double y1,
double y2,
double r, GLDOUBLE *shape2collision, GLDOUBLE *shapeMBBmin, GLDOUBLE *shapeMBBmax );
171 int fast_sphere_MBB_intersect_collisionSpace(
double r, GLDOUBLE *shape2collision, GLDOUBLE *shapeMBBmin, GLDOUBLE *shapeMBBmax );
172 int overlapMBBs(GLDOUBLE *MBBmin1, GLDOUBLE *MBBmax1, GLDOUBLE *MBBmin2, GLDOUBLE* MBBmax2);
173 int fast_ycylinder_polyrep_intersect2(
double y1,
double y2,
double AVr,
struct point_XYZ pcenter,
double scale,
double *minVals,
double *maxVals);
176 struct sCollisionGPU* GPUCollisionInfo();
177 struct point_XYZ run_non_walk_collide_program(GLuint vertex_vbo, GLuint index_vbo, float *modelMat,
int ntri,
178 int face_ccw,
int face_flags,
float avatar_radius);
179 bool collision_initGPUCollide (
struct sCollisionGPU*);
180 void createGPUCollisionProgram();