Bullet碰撞检测
DBVT 在bullet 引擎中是很基础且重要的一个数据结构,本质上是一个可以动态更新的AABB树。
碰撞响应的分析
约束分类:可积约束,不可积约束 ,摩擦力(见[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]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的作者
Bullet碰撞检测的更多相关文章
- bullet物理引擎与OpenGL结合 导入3D模型进行碰撞检测 以及画三角网格的坑
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11681069.html 一.初始化世界以及模型 /// 冲突配置包含内存的默认设置,冲突设置. ...
- Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)
实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...
- windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
平台:Win7,VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图: 从中可见,Bullet的LinearMath(线性数学模块),其上是BulletColl ...
- Bullet的学习资源(用Doxygen生成API文档)
Bullet 全称 Bullet Physics Library,是著名的开源物理引擎(可用于碰撞检测.刚体模拟.可变形体模拟),这里将bullet的学习资源整理一下,希望能帮助入门者少走弯路. 看下 ...
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
一.七说八说 大家都发现了= =,做了那么多,发现就是摆设,完全没有打飞机的感觉,没有实现碰撞的监测.比如说呢,子弹和敌机,玩家与敌机就是需要有碰撞检测的说,然后在这篇我想会很长很长的教 ...
- cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
在上篇我们加上了简单的坦克之间的碰撞检测,这篇我们继续加上子弹之间, 子弹与坦克之间的碰撞检测,对于上一篇碰撞处理不太完美的地方我们继续改进. 1.子弹之间的碰撞 //玩家子弹和敌方子弹之间的碰撞 C ...
- [Bullet3]三种碰撞检测及实现
官方文档:http://bulletphysics.org 开源代码:https://github.com/bulletphysics/bullet3/releases API文档:http://bu ...
- pygame 笔记-6 碰撞检测
这一节学习碰撞检测,先看原理图: 2个矩形如果发生碰撞(即:图形有重叠区域),按上图的判断条件就能检测出来,如果是圆形,则稍微变通一下,用半径检测.如果是其它不规则图形,大多数游戏中,并不要求精确检测 ...
- Bullet物理引擎的安装与使用
图形赋予游戏一种视觉的吸引力,但是能够让游戏的世界鲜活起来的还应该是内部的物理引擎.物理引擎是游戏引擎中的子模块,是一种软件组件,可仿真物理系统.它根据牛顿力学定律,计算游戏中物体的合理的物理位置,并 ...
随机推荐
- 【noi 2.6_2000】&【poj 2127】 最长公共子上升序列 (DP+打印路径)
由于noi OJ上没有Special Judge,所以我是没有在这上面AC的.但是在POJ上A了. 题意如标题. 解法:f[i][j]表示a串前i个和b串前j个且包含b[j]的最长公共上升子序列长度 ...
- Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors 线性筛质因子
题目链接:D:Two Divisors 题意: 给你n个数,对于每一个数vi,你需要找出来它的两个因子d1,d2.这两个因子要保证gcd(d1+d2,vi)==1.输出的时候输出两行,第一行输出每一个 ...
- Codeforces Round #652 (Div. 2) C. RationalLee 贪心
题意: t组输入,你有n个数,还有k个朋友,每一个朋友需要wi个数.意思就是你要给第i个朋友分配wi个数,输入保证w1+w2+...+wk=n 一个朋友的兴奋值是你分配给他的数中最大值加上最小值的和( ...
- Vue的七种传值方式
目录 1,父传子 2,子传父 3,兄弟组件传值 4,父组件使用子组件的数据和方法 5,子组件使用父组件的数据和方法 6,Vuex传值 6.1,定义store 6.2,挂载 6.3,使用 7,路由传值 ...
- ssh原理及加密传输
1.ssh??(保证过程中是加密的,即安全的)ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议.ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供 ...
- Scanner用户交互
Scanner用户交互 Scanner对象 引入语法: Scanner scanner=new Scanner(System.in);(固定的) 小写scanner为定义的名称 scanner.clo ...
- Linux系统SCSI磁盘扫描机制解析及命令实例
介绍Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进行 ...
- java 提供了哪些IO方式
今天听了杨晓峰老师的java 36讲,感觉IO这块是特别欠缺的,所以讲义摘录如下: 欢迎大家去订阅: 本文章转自:https://time.geekbang.org/column/article/83 ...
- HDU 3247 Resource Archiver(AC自动机 + 状压DP + bfs预处理)题解
题意:目标串n( <= 10)个,病毒串m( < 1000)个,问包含所有目标串无病毒串的最小长度 思路:貌似是个简单的状压DP + AC自动机,但是发现dp[1 << n][ ...
- Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好?
Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好? 在这个蔚蓝色的星球上,流传着两大神器的传说:据说Emacs是神的编辑器,而Vim是编辑器之神. 一些人勇敢地拾起了Vim或Emacs,却发 ...