0.简介
物体再物理引擎中属于实体,这里先将物体实现,我们的主要路线是从各种作用力开始,所以物体就用简单的圆形来做演示,编写起来方便。
1.圆形
圆形表达容易一些,一个圆心和一个半径就够了。
class Object
{
public:
//物体类型
int type = 0;
//速度
vec3 velocity = vec3(0,0,0);
//力
vec3 force = vec3(0, 0, 0);;
//世界坐标
vec3 position = vec3(0, 0, 0);
//变换矩阵
mat3 axis;
//质量
float mass;
virtual void operator<<(const vec3 & _force);
//速度计算
void updateVelocity(float time);
//位置计算
void updatePosition(float time);
//更新
void update(float time);
Object();
~Object();
};
void Object::updateVelocity(float time)
{
velocity += force * time;
}
void Object::updatePosition(float time)
{
position += velocity * time + force * time * time;
}
void Object::update(float time)
{
updatePosition(time);
updateVelocity(time);
}
void Object::operator<<(const vec3& _force)
{
force += _force;
}
先定义一个父类,后面还有更多的多边形等待编写。
圆形这就就这样实现。
class Circle : public Object
{
public:
float radius = 0;//圆形半径
Circle();
Circle(vec3 _center, float _radius)
{
position = _center;
radius = _radius;
}
~Circle();
};
细心点会发现力作用的函数中有个time的参数,这个参数就是时间,力的作用是有时间的,并且计算速度和路程都是积分运算,需要时间参数,时间的间隔目前手动定义为0.01,实际上比这个还要小。