Bullet的最小化功能封装

既然是"最小化", 那么就要明确最少需要哪些功能. 对于一般的物理应用来说, 只是简单地模拟碰撞, 柔体什么的都用不到. 在这样的前提下, bullet的工程可以精简到三个: libbulletcollision, libbulletdynamics, libbulletmath.

接下来, 需要明确一下基本的物理概念. 这个是跟用什么库(physx, havok, etc)是没有关系的. 在上面的前提下, 物理方面可以抽象成一个程序对象和三个物理对象:

  • 程序对象: 就是对物理引擎的包装, 一般只有三个行为: 创建, 销毁, 更新.
  • 物理对象:
    • 世界: 就是场景, 物体模拟发生的舞台. 基本功能有添加Actor(下面这俩东西), 设置重力, 射线拣取
    • 静态物件: 不可移动的碰撞物件, 如房子, 树. 这个通常是由多个基本几何对象(box, capsule, sphere, cylinder...)组成.
    • 动态刚体: 可以移动的或可被碰撞影响的物件, 如皮球, 人, 车等. 需要与图形表示(图形引擎中的模型)进行绑定的属性有位置, 朝向, 大小. 通常只需要从中获取变换矩阵并更新到图形引擎即可. 外部操作有受力, 动量(速度相关).

另外, 物体之间还有一种约束关系(连接关系), 用于弹簧, 绳索, 转轴之类的模拟, 这里不考虑.

如果不需要多个场景, 可以把程序对象合并进物理对象, 只是为了方便使用, 设计的话太复杂了反而成了过度设计.

以Bullet的.net wapper为例, 它只在C-API的基础上抽象了三个对象:

这只是最基本的功能, 不过在这基础上添加受力, 材质属性什么的就很容易了.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jouypub

Redis百亿级Key存储方案

该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关...

1916
来自专栏数据结构与算法

博弈论入门之nim游戏

nim游戏 nim游戏 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有n堆石子,两个人可以从任意一堆石子中拿任意多个石子(不能不拿),没法拿的...

7769
来自专栏宏伦工作室

200行Python代码实现2048

2184
来自专栏牛客网

CVTE一面二面

1270
来自专栏tkokof 的技术,小趣及杂念

“连连看”小析

近段日子与几位同事聊到了“连连看”这个小游戏,感觉还颇有些趣味,虽然其本身规则并不繁琐,但玩起来确实很能让人投入。出于自己的一点追究癖,自己这几天还认真考虑了...

451
来自专栏跨界架构师

[译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块

  这些模式根据领域驱动设计,广泛地推行了面向对象设计的最佳实践。他们指导决策来提炼模型,并使模型和实现保持一致,每一个都增强了其他的有效性。仔细制定模型元素的...

812
来自专栏恰同学骚年

自己动手写游戏:飞机大战

  要说微信中最火爆的小游戏是哪款,可能既不是精心打造的3D大作,也不是《植物大战僵尸2》,而是微信5.0刚开启时的《飞机大战》。

2391
来自专栏上善若水

007尝试使用UML图

尝试使用uml图来帮助自己快速的构建稳健的程序 uml对理清自己的思路,应该是很有帮助的了

1032
来自专栏PPV课数据科学社区

【每日一课】R语言入门教程-1.1 认识R

课程名称:R语言入门教程 第一章:认识R 1.1 认识R 【课程目的】 在大数据时代里,数据分析愈发重要,R语言适合做数据分析,R语言已成为许多数据分析...

3385
来自专栏数据派THU

独家 | Python数据分析入门指南

作者:Zack Jost 翻译:梁傅淇 校对:丁楠雅 本文长度为1500字,建议阅读3分钟 Zack Jost是美国第一资本投资国际集团的首席数据科学家,这是他...

2006

扫码关注云+社区