Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
RigidBody.h
Go to the documentation of this file.
1#pragma once
2#include <mutex>
3#include <vector>
4#include <glm/glm.hpp>
5#include <glm/gtc/quaternion.hpp>
6
9
10class Mesh;
11
12namespace Physics {
13
14 class RigidBody : public PhysicsBody {
15 public:
16 RigidBody(uint32_t id, double mass, std::unique_ptr<Bounding::ICollider> collider, glm::vec3 pos = glm::vec3(0.0f), bool isStatic = false);
17 explicit RigidBody(uint32_t id, std::unique_ptr<Bounding::ICollider> collider, glm::vec3 pos = glm::vec3(0.0f), bool isStatic = true); // static objects dont need mass
18
19 void step(float dt, BodyLock lock) override;
20
21 void recordFrame(float t, BodyLock lock) override;
22 void loadFrame(const ObjectSnapshot &snapshot, BodyLock lock) override;
23
24 Bounding::ICollider *getCollider() const override { return collider.get(); }
25
26 bool collidesWith(const PhysicsBody &other) const override;
27 bool collidesWithPointMass(const PointMass &pm) const override;
28 bool collidesWithRigidBody(const RigidBody &rb) const override;
29
30 bool resolveCollisionWith(float dt, PhysicsBody &other) override;
31 bool resolveCollisionWithPointMass(float dt, PointMass &pm) override;
32 bool resolveCollisionWithRigidBody(float dt, RigidBody &rb) override;
33
34 void setScale(const glm::vec3& newScale);
35 void setGeometry(const std::vector<glm::vec3>& vertices, const std::vector<unsigned int>& indices);
36 private:
37 std::unique_ptr<Bounding::ICollider> collider;
38 glm::vec3 scale = glm::vec3(1.0f);
39 std::vector<glm::vec3> meshVertices;
40 std::vector<unsigned int> meshIndices;
41
42 void recomputeGeometry();
43 };
44
45}
Abstract interface for collision detection shapes.
BodyLock
Definition PhysicsBody.h:25
GPU mesh representation with support for instanced rendering.
Definition Mesh.h:58
Abstract base class for collision volumes in the physics engine.
Definition ICollider.h:64
bool resolveCollisionWith(float dt, PhysicsBody &other) override
bool collidesWith(const PhysicsBody &other) const override
Definition RigidBody.cpp:94
bool collidesWithPointMass(const PointMass &pm) const override
Definition RigidBody.cpp:98
bool resolveCollisionWithPointMass(float dt, PointMass &pm) override
Bounding::ICollider * getCollider() const override
Definition RigidBody.h:24
bool resolveCollisionWithRigidBody(float dt, RigidBody &rb) override
void recordFrame(float t, BodyLock lock) override
Definition RigidBody.cpp:61
bool collidesWithRigidBody(const RigidBody &rb) const override
void step(float dt, BodyLock lock) override
Definition RigidBody.cpp:81
void loadFrame(const ObjectSnapshot &snapshot, BodyLock lock) override
Definition RigidBody.cpp:69
void setGeometry(const std::vector< glm::vec3 > &vertices, const std::vector< unsigned int > &indices)
Definition RigidBody.cpp:22
void setScale(const glm::vec3 &newScale)
Definition RigidBody.cpp:16