
物理引擎
文章平均质量分 67
ARTELE
爱好计算机
展开
-
物理引擎探究(10)---球碰撞旋转
0.简介上次一我实现了球碰撞后的运动轨迹计算,这回要实现球的旋转。1.角动量我觉得这里应该用到角动量了,当球与球碰撞之后,球自身会因为碰撞点有摩擦力,导致球旋转的,主要就是来求这个旋转的速度,这里就是角速度,所以在形状类中我添加了两个新的属性。 //旋转速度 vec3 angular_velocity = vec3(0,0,0); //旋转角度 vec3...原创 2020-02-04 19:14:03 · 3440 阅读 · 4 评论 -
物理引擎探究(9)---球碰撞处理
0.简介球的碰撞处理,之前想着会比较简单,但是实际上比想象的难一些。1.球与球的碰撞之所这么分类,所以因为球和球的碰撞比较特殊,目前暂时不考虑摩擦力的情况,球与球碰撞产生的碰撞交点是一定过两个球心的连线的,这样球就一定会因为碰撞产生位移。球的正碰是特殊情况,这里我们直接考虑球与球的斜碰,斜碰就是两个球碰撞时候,碰撞交点不在速度方向上。关于斜碰后速度的变化可以看如下文章作为参考。...原创 2020-02-03 03:28:42 · 3682 阅读 · 0 评论 -
物理引擎探究(8)---碰撞处理
0.简介碰撞处理就是将碰撞得到的信息进行处理后生成各种作用力,这个也算是一个单独的模块。1.碰撞生成信息根据碰撞的的结果,来判断产生力的大小,方向,种类等信息,然后将力作用在物体上,目前我实现了圆圈和线段的碰撞,这里就是把主要的框架写好,具体的力分析后面再说。class CollideInfo{public: CollideInfo() {} CollideInfo(Ob...原创 2020-01-31 18:22:38 · 1172 阅读 · 0 评论 -
物理引擎探究(7)---第一次碰撞
0.简介碰撞是比较难写的部分,但是也不难写,掌握了规律就好办不少,这次实现一个最简单的碰撞判断。1.圆圈与直线的碰撞上一次实现了直线,严谨来说是线段,圆圈与一条线段的碰撞,方法有很多,不要拘泥于我接下来要介绍的一种方法。首先我利用圆圈的圆心,将圆心O投影到线段所在直线上作为点C,线段的端点是A和B,如果C在AB之间,则向量CA与CB的夹角应该是180度,此时计算圆心到C点距离,如果...原创 2020-01-31 14:53:29 · 572 阅读 · 0 评论 -
物理引擎探究(6)---直线
0.简介我觉得新加一个物体没必要单独写一次,所以这是最后一次写新加的物体,后面再有新加入的就一笔带过了。1.直线直线,其实我用的是线段,目的是用来当做地面,或者是围墙。看起来就是一个直线,其实有要添加好多代码,不只是直线自身的代码,还有关于直线显示的代码,组合物理直线和显示直线的类。class Line :public Object{public: vec3 A, B;...原创 2020-01-30 22:23:00 · 338 阅读 · 0 评论 -
物理引擎探究(5)---显示世界
0.简介都说万事开头难,前面的工作都是准备工作,到这这里才能看到一点点成果,这回我让世界里的内容显示出来。1.显示借助opencv,将之前的圆形显示出来,对于显示物体,也有一个类,作为显示对象,和计算的物理对象是分开的。class DrawObject{public: vec3 postition; DrawObject(); DrawObject(vec3 pos)...原创 2020-01-30 18:05:28 · 372 阅读 · 0 评论 -
物理引擎探究(4)---世界
0.简介有了力和物体,现在需要一个容纳他们的世界,world。1.世界这个并不是多么浩大的东西,就是力和物体的操作场地,也是存储载体,世界中可以存储物体和力。在世界中,物体和力还要打包成一个结构体,作为一个完整的受力物体来看待。class Obj_Force{public: Object * obj; std::list<Force*>forces; Obj...原创 2020-01-30 17:39:04 · 388 阅读 · 0 评论 -
物理引擎探究(3)---物体
0.简介物体再物理引擎中属于实体,这里先将物体实现,我们的主要路线是从各种作用力开始,所以物体就用简单的圆形来做演示,编写起来方便。1.圆形圆形表达容易一些,一个圆心和一个半径就够了。class Object{public: //物体类型 int type = 0; //速度 vec3 velocity = vec3(0,0,0); //力 vec3 force ...原创 2020-01-30 17:30:55 · 450 阅读 · 0 评论 -
物理引擎探究(2)---力
0.简介物理引擎我个人总结,主要分为两个部分,一部分是物理作用的实现,就是受力计算,另一部分就是碰撞计算。我先从力开始。1.力设计这个里发生器听起来不容易理解,其实就是将力的代码和功能单独独立出来,力本身是一个实体对象,不跟随物体存在,单独存在。当物体有作用力的时候,将物体对象传入力对象中处理。class Force{public: Force(); ~Force();...原创 2020-01-30 16:40:11 · 936 阅读 · 1 评论 -
物理引擎探究(1)---基本准备
0.简介首先推荐一本书,《游戏物理引擎开发》,这本书自带源码,写的还可以,有些地方需要仔细研究才能理解,还有BOX2D源码,官网有个demo,看完这些写个简单的物理引擎,了解原理应该够了。1.环境需要C++语言,利用opencv当做显示媒介,其实opengl更好,只是用OpenGL还得写一大堆代码,为了方便并且不把太多注意力用在不需要的地方,这里就用opencv做显示了,glm做线性代...原创 2020-01-30 16:27:42 · 590 阅读 · 0 评论 -
物理引擎探究(0)---介绍
0.简介我比较喜欢游戏,不仅是玩,也喜欢开发,以前玩的时候,就好奇过,游戏是怎么做的,后来慢慢接触,发现并不是那么容易,但是也没有打击我好奇心,物理引擎现在有不少已经成熟了,例如2D的Box2D,3D的bullet(开源),physx,havok等,我就是很好奇物理引擎怎么实现的,并且觉得实现了一定很有趣,虽然说一个现在开发一款能商用的物理引擎不现实,改进也不太现实,毕竟工程量浩大不说,还要有...原创 2020-01-04 12:25:24 · 516 阅读 · 0 评论