le3d - LightEngine 3D
A straightforward C++ 3D software engine for real-time graphics
solid.h
Go to the documentation of this file.
1 
33 #ifndef SOLID_H
34 #define SOLID_H
35 
36 #include "../engine/le3d.h"
37 #include <stdint.h>
38 
39 /*****************************************************************************/
40 // Physical constants
41 #define VISCOSITY_OIL 1500fe-3
42 #define VISCOSITY_WATER 1.0fe-3
43 #define VISCOSITY_AIR 0.02fe-3
44 
45 /*****************************************************************************/
53 };
54 
55 /*****************************************************************************/
60 class LeSolid {
61 public:
62  LeSolid();
63  ~LeSolid();
64 
65  void init(const LeVertex & pos);
66  void stop();
67 
68  void configure(float mass, float radius);
69 
70  void glueMoveAxis(LeVertex axis);
71  void glueRotateAxis(LeVertex axis);
72 
73  void collideSolid(LeVertex contact, LeSolid & collider);
74  void collideHard(LeVertex contact, LeVertex normal, float rigidity);
75 
76  void applyFriction(LeVertex normal, float friction);
77 
78  void applyForce(LeVertex force);
79  void applyForceRight(float force);
80  void applyForceUp(float force);
81  void applyForceBack(float force);
82 
83  void applyTorque(LeVertex torque);
84  void applyTorqueRight(float torque);
85  void applyTorqueUp(float torque);
86  void applyTorqueBack(float torque);
87 
88  void applyForcePoint(LeVertex point, LeVertex force);
89  void applyTorquePoint(LeVertex point, LeVertex torque);
90 
91  void update(float dt);
92 
93 private:
94  void applyGravity();
95  void applyGround();
96 
97  void computeVectors();
98  void computeFriction(float dt);
99 
100 public:
101  float adhesion;
102  float rigidity;
103  float gravity;
104 
105  float groundLevel;
107 
113 
116 
120 
124 
128 
129 private:
130  float lastdt;
131  LeVertex frictionAccel;
132 
133  float mass, imass;
134  float inertia, iinertia;
135  float radius;
136 };
137 
138 #endif
void applyTorquePoint(LeVertex point, LeVertex torque)
Definition: solid.cpp:151
LeVertex rotAccel
Definition: solid.h:123
void update(float dt)
Definition: solid.cpp:228
LeVertex rotSpeed
Definition: solid.h:122
~LeSolid()
Definition: solid.cpp:57
LeVertex rightVector
Definition: solid.h:125
LeSolid()
Definition: solid.cpp:41
LeVertex glueMove
Definition: solid.h:114
void applyForceBack(float force)
Definition: solid.cpp:118
LeVertex posAccel
Definition: solid.h:119
void applyTorqueBack(float torque)
Definition: solid.cpp:146
void collideSolid(LeVertex contact, LeSolid &collider)
Definition: solid.cpp:252
LeVertex posSpeed
Definition: solid.h:118
float rigidity
Definition: solid.h:102
float groundFriction
Definition: solid.h:106
void applyTorque(LeVertex torque)
Definition: solid.cpp:131
LeVertex fluid1Rotate
Definition: solid.h:110
void applyFriction(LeVertex normal, float friction)
Definition: solid.cpp:95
void glueRotateAxis(LeVertex axis)
LE_SOLID_SYSTEM
System coordinate use for calculation.
Definition: solid.h:50
LeVertex rot
Definition: solid.h:121
Definition: solid.h:51
LeVertex backVector
Definition: solid.h:127
float gravity
Definition: solid.h:103
LeVertex pos
Definition: solid.h:117
Definition: solid.h:60
LeVertex fluid2Rotate
Definition: solid.h:112
void applyForcePoint(LeVertex point, LeVertex force)
Definition: solid.cpp:123
void configure(float mass, float radius)
Definition: solid.cpp:81
LeVertex upVector
Definition: solid.h:126
void glueMoveAxis(LeVertex axis)
float adhesion
Definition: solid.h:101
float groundLevel
Definition: solid.h:105
void applyTorqueUp(float torque)
Definition: solid.cpp:141
Represent a vertex in 3D space.
Definition: geometry_scalar.h:46
void init(const LeVertex &pos)
Definition: solid.cpp:63
void stop()
Definition: solid.cpp:73
void applyForce(LeVertex force)
Definition: solid.cpp:103
void applyForceUp(float force)
Definition: solid.cpp:113
LeVertex fluid2Move
Definition: solid.h:111
LeVertex fluid1Move
Definition: solid.h:109
LeVertex glueRotate
Definition: solid.h:115
void applyTorqueRight(float torque)
Definition: solid.cpp:136
LE_SOLID_SYSTEM fluidSystem
Definition: solid.h:108
Definition: solid.h:52
void collideHard(LeVertex contact, LeVertex normal, float rigidity)
Definition: solid.cpp:267
void applyForceRight(float force)
Definition: solid.cpp:108