9 #define GLM_ENABLE_EXPERIMENTAL 10 #include "glm/glm.hpp" 11 #include "glm/gtx/string_cast.hpp" 12 #include "glm/gtx/norm.hpp" 17 const float pi = 3.141592654f;
26 Tri(
int _id, vector<vec3> _data);
46 int MAX_TRIANGLES = 50;
71 vector<vec3> verts_ws = {};
72 vector<uint> verts_indices = {};
79 Face(
const vector<uint> &verts_indices);
83 int setData(
const vector<vec3> &verts);
102 vector<uint> faces_indices = {};
103 vector<Face> faces = {};
108 Edge(
const vector<uint> &verts_indices,
const vector<uint> &faces_indices);
113 int setData(
const vector<vec3> &verts,
const vector<Face> &faces);
134 mat4 getModelMatrix();
142 int calculateVertices();
146 static int getIndex(
int ID);
159 vector<int> triIDs = {};
160 vector<int> objectIDs = {};
167 float density = 1.0f;
179 vector<vec3> a_bounding_vertices = { vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),
180 vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),vec3(0,0,0) };
182 vector<vec3> a_body_bounding_vertices = {};
183 vector<Face> faces = {};
184 vector<Edge> edges = {};
188 void *contactFeature = NULL;
189 int compositeBodyIndex = -1;
191 bool sleeping =
false;
195 bool is_static =
false;
237 int integrateForces(vec3 gravity,
float deltaTime);
241 int integrateVelocities(
float deltaTime);
245 void add(
int bodyID);
249 mat4 getModelMatrix();
264 float density = 1.0f;
275 vector<vec3> a_bounding_vertices = { vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),
276 vec3(0,0,0),vec3(0,0,0),vec3(0,0,0),vec3(0,0,0) };
278 vector<vec3> a_body_bounding_vertices = {};
280 vector<unsigned int> bodyIndexes = {};
282 int compositeBodyIndex = -1;
286 bool apply_gyroscopic_term =
false;
288 bool sleeping =
false;
289 unsigned int colliding = 0;
float bounding_radius
Definition: body.hpp:155
float xMax
Definition: body.hpp:42
vec3 angular_momentum
Definition: body.hpp:172
vec3 position
Definition: body.hpp:36
float xMin
Definition: body.hpp:39
Tri(int _id, vector< vec3 > _data)
BodyType type
Definition: body.hpp:283
float friction
Definition: body.hpp:168
vec3 torque
Definition: body.hpp:270
mat3 inverse_world_inertia_tensor
Definition: body.hpp:271
int initCylinder(CollisionBody *body, float r1, float r2, float h)
Initializer function for a cylinder CollisionBody.
float yMax
Definition: body.hpp:43
vec3 cm_force
Definition: body.hpp:269
BodyType
Definition: body.hpp:116
int initTriangle(CollisionBody *body, vector< vec3 > verts)
Initializer function for a triangle CollisionBody.
float mass
Definition: body.hpp:165
bool colliding
Definition: body.hpp:162
Octree for triangle meshes.
Definition: body.hpp:32
vec3 torque
Definition: body.hpp:174
void createChildren(TriOctree &octree)
Helper function for spawning child TriOctree.
static int Counter
Definition: body.hpp:150
vector< TriOctree > children
Definition: body.hpp:45
vec3 angular_velocity
Definition: body.hpp:177
static vector< CollisionBody * > allBodies
Definition: body.hpp:149
RigidBody structure for organising data to model physics simulations of convex hull collisions...
Definition: body.hpp:224
float zMin
Definition: body.hpp:41
vec3 angular_momentum
Definition: body.hpp:268
static int Counter
Definition: body.hpp:257
vec3 angular_velocity
Definition: body.hpp:273
float coefficient_of_restitution
Definition: body.hpp:164
vec3 position_ws
Definition: body.hpp:73
mat3 inverse_body_inertia_tensor
Definition: body.hpp:176
int index
Definition: body.hpp:35
const float pi
Definition: body.hpp:17
vec3 v2_ws
Definition: body.hpp:97
vec3 cm_velocity
Definition: body.hpp:171
vector< vec4 > getAllNodes()
Get a vector of nodes, represented with a 3D position and half-width of the TriOctree. {vec4(x,y,z,hw), ... }.
float coefficient_of_restitution
Definition: body.hpp:261
float yMin
Definition: body.hpp:40
CollisionBody structure for organising data to model physics simulations of convex hull collisions...
Definition: body.hpp:121
float zMax
Definition: body.hpp:44
vec3 cm_velocity
Definition: body.hpp:267
int initSphere(CollisionBody *body, float r)
Initializer function for a sphere CollisionBody.
int id
Definition: body.hpp:24
vector< vec3 > data
Definition: body.hpp:25
vector< int > getTriangleSet(TriOctree &octree, CollisionBody &sphereBody, vector< int > &tri_ids)
Get triangle set in the octree for the positions.
mat3 orientation
Definition: body.hpp:170
vector< CollisionBody > initTriangleMesh(vector< vec3 > verts)
Initializer function for triangle mesh CollisionBody's.
vec3 normal_ws
Definition: body.hpp:74
Face structure for organising CollisionBody collision data.
Definition: body.hpp:70
static vector< RigidBody * > allBodies
Definition: body.hpp:281
int v1_index
Definition: body.hpp:99
mat3 inverse_world_inertia_tensor
Definition: body.hpp:175
vector< Tri > triangles
Definition: body.hpp:38
Edge structure for organising CollisionBody collision data.
Definition: body.hpp:95
vec3 cm_force
Definition: body.hpp:173
int initBox(CollisionBody *body, float w, float h, float b)
Initializer function for a box CollisionBody; w x h x b.
float one_over_mass
Definition: body.hpp:166
vec3 v1_ws
Definition: body.hpp:96
float mass
Definition: body.hpp:262
vec3 cm_position
Definition: body.hpp:265
mat3 inverse_body_inertia_tensor
Definition: body.hpp:272
vec3 cm_position
Definition: body.hpp:169
static int counter
Definition: body.hpp:34
Triangle class for managing data for triangle meshes.
Definition: body.hpp:22
mat3 orientation
Definition: body.hpp:266
void initOctree(TriOctree &octree, int ind, vec3 pos, float hwidth, vector< Tri > tris)
Initialization function.
float one_over_mass
Definition: body.hpp:263
mat4 offset
Definition: body.hpp:186
float hw
Definition: body.hpp:37
int v2_index
Definition: body.hpp:100