Bullet的最小化功能封装

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

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

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

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

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

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2526
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31510
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5426
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4005
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4858
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6768
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3105
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2547

扫码关注云+社区