第一章 框架设计

总体的类如下图所表示。

Shape作为形状基类。存储了与形状有关的物理量

class Shape
{public:float I = 0.0f, invI = 0.0f;//转动惯量和逆
};

Rectangle和Circle派生于Shape,存储了实际的形状信息。

class Rectangle :public Shape
{public://存储矩形的长宽agl::vec2f r;
};class Circle :public Shape
{public:float r;
};

PhyAttr中存放的是各种物理属性,这些属性是不限于任何物体都有的属性。

namespace phy2d
{class PhyAttr{public:PhyAttr(){velocity = agl::vec2f(0.0f);position = agl::vec2f(0.0f);force = agl::vec2f(0.0f);}agl::vec2f velocity;//速度agl::vec2f position;//位置float rotation = 0.0f;//旋转角度float angularVelocity = 0.0f;//角速度agl::vec2f force;//力float torque = 0.0f;//转矩float friction = 0.0f;//摩擦力float mass = 0.0f, invMass = 0.0f;//质量和逆~PhyAttr() {}};
};

PhyObj是PhyRect与PhyCircle的父类,其主要作用是做为基类指针,支持动态类型使用,分别继承了形状和物理特性,组成了有物理特性的形状。

namespace phy2d
{class PhyObj {};class PhyRect :public PhyObj,public Rectangle, public PhyAttr{public:};class PhyCircle :public PhyObj, public Circle, public PhyAttr{public:};
};

World中负责整个物理世界的运行,存储物体和碰撞信息。协调整个物理引擎的流程。

namespace phy2d
{class World{//存储物体std::vector<PhyObj*> objects;//存储碰撞信息std::unordered_map<std::tuple<PhyObj*, PhyObj*>, Contact> collisions;public:};
}

Contact是存储碰撞信息的结构体,Impulse是存储冲量的,因为我们要实现冲量累积方法,所以碰撞信息中保留上一次的冲量信息。Driver是存储两个物体指针和其碰撞信息的结构体,这个结构是存放碰撞后结果的直接结构体,并且其中要有计算两个物体冲量变化的能力。

namespace phy2d
{class Impulse{public://正面和侧面的动量float ImpulseNormal;float ImpulseSide;};//碰撞信息class Contact{public:Contact() {}agl::vec2f position;//碰撞点位置agl::vec2f normal;//分离轴方向//agl::vec2f r1, r2;//半径//现场算float separation;//最小相交距离};class Driver{public://碰撞信息列表std::vector<Contact> contacts;//碰撞物体PhyObj *a, *b;//运动执行函数void ApplyImpulse(){//计算好必要的值//由于之前的冲量计算是在连个形状相交情况下计算,//所以一旦两个物体分开,计算将不会连续//循环迭代}};
}

还有一些数学计算,向量计算的类,这些类可以自己写,也可以用现成的比如GLM,这里就使用自己写的向量矩阵计算库了。

自己动手写2D物理引擎-初级篇(1)相关推荐

  1. python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎

    全球图形学领域教育的领先者.自研引擎的倡导者.底层技术研究领域的技术公开者,东汉书院在致力于使得更多人群具备内核级竞争力的道路上,将带给小伙伴们更多的公开技术教学和视频,感谢一路以来有你的支持.我们正 ...

  2. APE 2D物理引擎使用

    先去http://www.cove.org/ape/index.htm 下载作者的最新版APE 然后打开说明文档 docs\api\index.html 这里一共十二个类,看起来很少,所以初学者可以更 ...

  3. 自己动手写操作系统之环境构建篇

    自己动手写操作系统之环境构建篇 最近开始看自己动手写操作系统,但是书中采用软盘启动很是郁闷,于是想是否可以从优盘启动呢?作为一名BIOS工程师,曾经用优盘启动过dos,linux等系统,于是做了如下尝 ...

  4. 制作简单的2D物理引擎(零)

    最近发现了Github上的开源物理引擎项目Matter.js,对它很感兴趣,发现源码并不算长,算上注释大约1万行左右,值得剖析一番.Matter.js实现一个最小化的2D物理引擎,性能不错,故打算用C ...

  5. .sql文件_自己动手写SQL查询引擎

    自己动手写SQL查询引擎 起因 笔者在实际工作中经常需要解析文件,每次文件稍有变化,都得拷贝粘贴一堆代码. 于是就想着能不能做一个通用的服务,通过配置的方式解析文件. 配置通用 最通用的方法就是自己定 ...

  6. 关于2d物理引擎box2d与ape的评论

    APE不行,做点简单的撞球,台球之类游戏还行.我最开始用他实验性做了个简单的基于物理引擎的泡泡龙类游戏,发现稍微多一点的几何体堆叠在一起就会产生渗透现象,没办法只好更改最初的设计.要专注做物理游戏,还 ...

  7. 2D物理引擎--谁碰了我的奶酪

    人生犹如"迷宫",每个人都在其中寻找各自的"奶酪"--稳定的工作.身心的健康.和谐的人际关系.甜蜜美满的爱情,或是令人充满想象的财富-- 那么,你是否正在享受你 ...

  8. 自己动手写一个JQuery插件(第二篇)(转)

    1.Hold住,我们要开始动真格了! 是的,看到这个标题,你一定也和我一样迫不及待了,因为我们不像之前那篇教程一样小打小闹了,我们现在要动真格了,这次我们要写的插件是上个插件的增强版本.而这个插件包含 ...

  9. 动手实现2d游戏引擎(一)

    本人准备分析cocos2dx的引擎·实现一个2d引擎名字叫gl02 git地址:https://github.com/1179432578/gl02.git 下面是引擎一些基本类,后面会根据需要进行修 ...

  10. 自己动手写操作系统系列第1篇,从开机加电到切换保护模式

    本系列为小组作业,参考了很多教程,包括ucore.30天自制操作系统.linux内核设计的艺术等内容.以及最重要的是小组里的几位大佬,本篇文章只是记录自己在学习过程中每一步的脚印,并包含了很多相关知识 ...

最新文章

  1. 关于创建Custom Container View Controller
  2. 怎么看承重_怎么选购到一个好的工具柜,这些方面要考虑
  3. WinCE BSP的BIB文件介绍
  4. 单例模式到Java内存模型
  5. python实现接口自动化_python 实现接口自动化1
  6. jQuery时间轴插件:jQuery Timelinr
  7. MySQL学习笔记之MySQL安装详解
  8. Spring Boot 之 ResourceHandlerRegistry 通过url直接访问本地服务器上指定路径的资源
  9. 44 万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  10. Error:Connection activation failed: No suitable device found for this connection
  11. 20200910:力扣204周周赛题解上(Java/Python/Cpp)
  12. ESP8266-01/01S配对阿里云生活物联网教程(超详细)
  13. 我学Delphi心得及笔记----用户自定义数据类型(第三讲)
  14. [转] NOI, NOIP, IOI, ACM
  15. Java面试八股文 2021年最新Java面试题及答案汇总
  16. 利用身体记忆GRE词汇
  17. MYSQL_ 表结构设计和数据类型优化
  18. 判断数组中是否存在某个元素
  19. cannot find -lxxx 问题的总结
  20. Python爬虫神器pyppeteer,对 js 加密降维打击

热门文章

  1. 什么软件测试显示器响应时间准,液晶响应时间测试系统
  2. DGND PGND GND AGND 精密电阻与普通电阻
  3. 连接程序,汇编程序,编译程序和解释程序
  4. VMware Workstation 安装ssh服务器
  5. Scrapy框架:Request和Response对象,使用Request发送get请求、FormRequest发送post请求
  6. 初写数学建模论文 -- 摸鱼1
  7. 【无标题】2022年“研究生科研素养提升”系列公益讲座在线测评本次测验答题时间为8月15日-26日,60分及格,每人有一次补考机会。
  8. 2.16 自定义快速访问工具栏以提升工作效率 [原创Excel教程]
  9. 【工具】“Error while running C:\ti\xdctools_3_31_01_33_core/xs --xdcpath=C:\ti\tir……”
  10. vue实现添加购物车光标效果