physics
collision.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 #include "body.hpp"
7 
8 extern float depth_epsilon;
9 
13 unsigned int getSupport(CollisionBody &hull, vec3 n);
14 
15 
16 enum QueryType { EDGE_AB=0, FACE_AB=1, FACE_BA=2 };
20 struct Query {
21  float best_distance = -FLT_MAX;
22  glm::ivec2 collision_pair_index = glm::ivec2(-1,-1);
23  glm::vec3 normal;
24  int id = -1;
28  Query(){};
32  Query(float _best_distance, glm::ivec2 _collision_pair_index, glm::vec3 _normal) {
33  best_distance = _best_distance;
34  collision_pair_index = _collision_pair_index;
35  normal = _normal;
36  id = -1;
37  }
38  Query(const Query &q) {
39  this->best_distance = q.best_distance;
40  this->collision_pair_index = q.collision_pair_index;
41  this->normal = q.normal;
42  this->id = q.id;
43  }
44  Query& operator=(const Query &q) {
45  this->best_distance = q.best_distance;
46  this->collision_pair_index = q.collision_pair_index;
47  this->normal = q.normal;
48  this->id = q.id;
49  return *this;
50  }
51 };
55 bool cylinderBoxCollision(const CollisionBody &cyl, const CollisionBody &obb);
59 bool sphereBoxCollision(const CollisionBody &hullA, vec3 closest_pt);
63 bool sphereSphereCollision(const CollisionBody &hullA, const CollisionBody &hullB);
67 bool sphereCylinderCollision(const CollisionBody &body_a, vec3 closest_pt);
71 bool SAT(CollisionBody &hullA, CollisionBody &hullB, Query &query);
75 vec3 closestPointOnCylinder(vec3 p, const CollisionBody &cylinder);
87 float rayOBBIntersect(vec3 origin, vec3 direction, mat3 obb_orientation);
bool SAT(CollisionBody &hullA, CollisionBody &hullB, Query &query)
Check collision between a CollisionBody and a CollisionBody.
float best_distance
Definition: collision.hpp:21
Query & operator=(const Query &q)
Definition: collision.hpp:44
unsigned int getSupport(CollisionBody &hull, vec3 n)
Find furthest vertex along normal, n, and return its index into hull.a_bounding_vertices.
Definition: collision.hpp:16
Query()
Default Constructor.
Definition: collision.hpp:28
int id
Definition: collision.hpp:24
A data structure to get data received from a collision.
Definition: collision.hpp:20
vec3 closestPointOnCylinder(vec3 p, const CollisionBody &cylinder)
Return the closest point on a cylinder, to another point, p.
Query queryEdgeDirections(CollisionBody &hullA, CollisionBody &hullB)
Query for Edge collisions in SAT.
QueryType
Definition: collision.hpp:16
bool sphereCylinderCollision(const CollisionBody &body_a, vec3 closest_pt)
Check collision between a sphere and a cylinder.
bool cylinderBoxCollision(const CollisionBody &cyl, const CollisionBody &obb)
Check collision between a BodyType::CYLINDER CollisionBody and a BodyType::BOX CollisionBody.
Query queryFaceDirections(CollisionBody &hullA, CollisionBody &hullB)
Definition: collision.hpp:16
CollisionBody structure for organising data to model physics simulations of convex hull collisions...
Definition: body.hpp:121
Query(float _best_distance, glm::ivec2 _collision_pair_index, glm::vec3 _normal)
Given point p, return point q on (or in) OBB b, closest to p.
Definition: collision.hpp:32
bool sphereSphereCollision(const CollisionBody &hullA, const CollisionBody &hullB)
Check collision between a sphere and a sphere.
float rayOBBIntersect(vec3 origin, vec3 direction, mat3 obb_orientation)
Ray OBB intersection function, returns a float along the vector origin + t * direction = contact_poin...
glm::vec3 normal
Definition: collision.hpp:23
glm::ivec2 collision_pair_index
Definition: collision.hpp:22
bool sphereBoxCollision(const CollisionBody &hullA, vec3 closest_pt)
Check collision between a CollisionBody and a sphere.
float depth_epsilon
Query(const Query &q)
Definition: collision.hpp:38
Definition: collision.hpp:16