Bullet 3D 物理引擎 简析(2)
原创帖子, 转载请注明出处,作者信息.
这个是自己分析bullet的代码过程中的笔记,比较简陋, 希望抛砖引玉, 欢迎板砖
作者: 马良 (http://www.iphonephysics.com/ ) (此blog需Over GW)
//应朋友要求在最后附上书目
理论准备:本科的数学分析,理论力学,线性代数。 尤其是理论力学中的朗格朗日动力学部分
最好能回忆起来。 碰撞检测上面列的两本书的内容就足够了,如果进一步挖掘需要看
计算几何方面的书
补一个架构图 引自[1]的12页,其中的STC即为上次分析中的islandmanager
碰撞响应的分析
约束分类:可积约束,不可积约束 ,摩擦力(见[1]第四章)
整个bullet在动力学方面的核心就是btSequentialImpulseConstraintSolver 这个类及其实现
这个类名字可以翻译为基于顺序冲量处理方法的约束求解过程(这是个缩略的函数名不可直译)。
这个名字的含义很重要,表示了这个求解方法是按照顺序来处理约束以及接触点,摩擦力,one by one
并且求解的结果是冲量的范数。整个的原理部分可以参照[1]的第4章节,[2]的第7章。
btSequentialImpulseConstraintSolver 的全部重心在于solveGroupCacheFriendlySetup
负责对于三种约束进行计算准备(包括计算一些解方程要用到的常量以及中间变量等)和 solveGroupCacheFriendlyIterations 负责应用PGS[9]求解。
solveGroupCacheFriendlySetup 分析
首先是关于可积约束的计算准备:首先是遍历约束数组,每一个约束都需要计算自己的jacbian(关键概念参照[1]的第四章)
初始化一些常量和中间变量 这里有些概念和公式比如惯性张量等都可以在[1],[8]中找到
关于接触点约束的计算准备:这里有个重要的函数convertContact, 把从碰撞检测阶段获得的接触点转化为不可积约束并初始化常量和中间变量,
以及初始化摩擦力的相关数据,摩擦力计算参照[1]第4章第6节 其中引用的公式也来自[1] 但是考虑到实时性,并不完全一致。
solveGroupCacheFriendlyIterations 分析
分别根据[9]中的PGS算法求解3类约束,重点是基于SIMD的优化,以及递归次数10的设置。
对于PGS的理解最好从Gauss-Sidel数值解法入手。
对于各类约束类型对应的jacbian 参照[1]第四章节71页
核心的数据结构
btSolverConstraint 存储每个约束的计算常量中间变量
btSolverBody 几何刚体对象和动力学求解对象的连接体
其它
整个过程中涉及到了穿透矫正[1]111页,时间递进[1]90页,bullet 没有采用多接触点同时求解的方法,会带来一些误差
[1]的第4章是整个动力学模拟的灵魂,理解了这章,整个求解过程都容易理解
下一步计划写softbody的分析
参考书目
[1]Stable, Robust, and Versatile Multibody Dynamics Animation
Kenny Erleben
关于多刚体-动力学模拟必读的文章 bullet很多实现都参考了此文
很好的一篇综述论文,实际上是下面这本书的草稿
网上可以下到免费的pdf版本
[2]physics based animation
Kenny Erleben
同作者的一本全面且用较为严格的数学语言描述物理模拟的经典好书
涵盖刚体,流体,非刚体
国内尚未引进,目前暂无电子版。 适合深度挖掘者使用。
[3]Game Physics, David H. Eberly
从游戏开发角度来阐释物理模拟,比较实用,内容稍显陈旧。 有电子版,不好找
[4]Physics.Engine.Development
同样是阐述物理模拟,不过是为入门读者准备,比较浅显易懂。 有电子版
[5]Collision Detection in Interactive 3D Environments
对照作者自己实现的solid碰撞检测引擎来讲述,很好的一本书。又电子版
[6]Real-Time Collision Detection
比较全面的阐述了碰撞检测,是一个初步入门的好书, 有电子版
[7]Computational Geometry in C
如果想在几何结构方面进一步挖掘,这本书不错,清华翻译的二版有卖,翻译的也好
三版已出,似乎还没引进
[8]Classical Mechanics. Prentice Hall, 3rd edition, January 2002.
理论力学,很多东西忘记了可以查看这本书 有电子版
[9]Iterative Dynamics with Temporal Coherence
一篇在GDC2005?上的ppt,简短描述有关PGS算法的问题,是Box2D的作者
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/superwiles/archive/2009/11/20/4839074.aspx
转载于:https://www.cnblogs.com/lancidie/archive/2011/03/02/1968577.html
Bullet 3D 物理引擎 简析(2)相关推荐
- Bullet 物理引擎 简析[1]
原创帖子, 转载请注明出处,作者信息. 这个是自己分析bullet的代码过程中的笔记,比较简陋, 希望抛砖引玉, 欢迎板砖 作者: 马良 (www.iphonephysics.com ) (此bl ...
- C++ 3D物理引擎库BulletPhysics基本使用
前言:最近在接触OpenGl和DX11的时候,顺便学习了Bullet这个3D物理引擎的基本使用,记录一下. |BulletPhysics介绍 BulletPhysics是一个跨平台的开源物理引擎,也是 ...
- 一篇上手LayaAir的3D物理引擎
昨天,我们分享了一篇2D物理文档<LayaAirIDE的可视化2D物理使用文档>. 今天,我们针对LayaAir引擎的初学者,以及对物理引擎使用不熟悉的开发者,再来分享一篇3D物理文档,本 ...
- 常见3D物理引擎概述
今天帮朋友找3D物理引擎的资料,以前也看过那么多了,一直没有总结过,今天顺便整理一下. 1. Havok: 老牌的君王,支持功能如下: http://www.havok.com · ...
- Cannon.js -- 3d物理引擎
文章目录 前言 一.关于Cannon.js 二.Cannon.js的使用 最后 注意点: 优化 事件 其他 本文完整代码下载: 相关链接: 前言 本篇将介绍Cannon.js -- 3d物理引擎的基础 ...
- Unity 3D 物理引擎简介 || Unity 3D 物理材质|| Unity 3D 力(AddForce)
Unity 3D 物理引擎简介 早期的游戏并没有强调物理引擎的应用,当时无论是哪一种游戏,都是用极为简单的计算方式做出相应的运算就算完成物理表现,如超级玛丽和音速小子等游戏. 较为常见的物理处理是在跳 ...
- [Unity 3D] 物理引擎学习笔记(一)
刚体: 同是物理引擎提供的功能,碰撞检测只需要有 Collider 便可以运作,但所有与作用力相关的属性和函数却都依赖 Rigidbody. 重力: 一旦使用了 Rigidbody 组件,这个 Gam ...
- kudu 存储引擎简析
本文由 网易云 发布. 1 概述 本文主要介绍kudu底层存储引擎的数据组织方式,先看整体结构如下: 一张表会分成若干个tablet , 每个tablet 包括MetaData 元信息及若干个Row ...
- bullet 物理引擎资料
bullet 官方网站 https://pybullet.org gamekit-developers 开源的游戏引擎,由 bullet 创始人发起. https://github.com/gamek ...
最新文章
- 【ACM】Doubly Linked List(STL list)
- 洛谷 P2163 [SHOI2007]Tree 园丁的烦恼
- 智能ABC拼音输入法的“秘密”
- 读写锁ReadWriteLock
- Flutter 36: 图解自定义 View 之 Canvas (三)
- 微信小程序的出现会给前端开发带来什么
- python import 错误 TypeError: 'module' object is not callable
- 数据库流行度10月排行榜:Oracle 王者归来和 Redis 青云直上
- JAVA导出excel如何设置表头跨行或者跨列,跪求各位大神了
- ubuntu jdk 1.7 安装
- Ubuntu上安装ns2-2.34
- HTTP GET请求URL中IP被异常替换的问题
- 极限分辨率是艾里斑的直径还是半径_小孔成像(二)——衍射,数值孔径和分辨率...
- linux下svn安装与版本控制
- chrome被hao123主页绑架的解决
- libtorrent实现bt客户端程序
- python常用的颜色英文表达_面料颜色中英文翻译对照表
- MATLAB调用M文件
- 内积空间中向量正交的定义
- JAVA如何利用迅雷接口解析磁力,关于神秘代码(磁力链接)如何正确使用
热门文章
- App分享之微信微博等各个社交平台的分享授权规则和常见问题
- 基于WinSvr2012共享文件夹的Hyper-V实时迁移之三实时迁移的实现及验证
- Linux下 su命令与su - 命令的区别
- 提高页面载入速度简单易行的四个办法。
- [deviceone开发]-do_Http组件示例
- iOS中JS 与OC的交互(JavaScriptCore.framework)
- 分享:Dlib 17.49 发布,跨平台 C++ 通用库
- 在项目中添加引用的意思
- 0102 项目经理的精神病(二)完美
- 【Vista中系统准备工具存在隐患,自动清除用户资料】