物理引擎探究(3)---物体

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,实际上比这个还要小。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值