Bullet3 入門


Bullet3 入門

Bullet3 簡介

Bullet 是一個開源免費(Zlib)的物理引擎,廣泛應用於游戲、動畫、電影和機器人仿真等領域。Blender、Maya、Unity3D 插件、gazebo、V-rep、Roboschool 等都使用了這個物理引擎。
其他的物理引擎還有PhysX 、Havok 等。

物理引擎的主要功能

  1. 連續和離散物體的碰撞檢測,物體形狀包括網格和基本幾何體的。
  2. 快速穩定的剛體約束求解器,包括車輛動力學、人體、直線約束、鉸鏈約束等等。
  3. 軟體物體動力學,包括衣服、繩子、可變形體等,同時支持約束。
  4. 自定義格式.bullet, 支持 URDF 格式,和 bsp 格式。

整體架構

https://img2018.cnblogs.com/blog/1518785/201810/1518785-20181025190220785-1261760789.jpg
呈分層結構,每個模塊都可以單獨拿來使用。
下圖展示了引擎運行的流程圖
https://img2018.cnblogs.com/blog/1518785/201810/1518785-20181025190221994-1052227643.jpg
引擎從左向右執行,從施加重力開始,到位置改變,坐標系變換結束。

數據結構

幾何模型

  • 形狀: shape 類 抽象出了幾何形狀的特征, 比如長方體, 球, 四面體,凸包. bullet 中的形狀類型非常豐富,有幾十種之多. 由於幾何形狀的特征是和具體對象無關的,所以一種形狀只要維持一個實例即可, 所有映射到該 shape 的對象可以共享這個實例.
  • 包圍體(BVH): 采用的是 AABB, 一般有 AABB, OBB, K-Dop, Convex Hull.
  • 空間划分: 主要是 Dynamic AABB Tree (剛體,曼哈頓距離) 和 Sweep and Prune (soft body)
  • 碰撞檢測算法:GJK ,sweep prune,box2box, shpere2shpere 等
  • 接觸點:
  • 約束: 六種約束類型,見文檔
  • motion state: 對渲染引擎提供的一個接口, 便於渲染引擎更新渲染對象的位置

完成幾何基礎構建后,在一個場景(collision world)內 加入 各個被模擬的物理對象(collision object)每個物理對象被映射到對映的 shape, 空間划分數據結構節點. 如果再在這些對象身上附加例如速度,角速度,轉動慣量等物理特征,就演化為 rigid object. Soft body 情況復雜一些, 一般由 mesh 構成

物理仿真

  • Broad Phase: 首先進行遠距碰撞檢測, 利用空間分割結構,如果不在同一個子樹內的物體不可能相交不用去計算, 在同一個子樹內的物體被放入 overlapping pair, 再進一步由對應的算法來計算出接觸點等信息. 采用哪一種算法取決於算法配置矩陣(見 bullet 手冊)
  • Narrow Phase: 根據 overlapping pairs 的分布情況計算出碰撞對象島(collision Island).而后依次對各個島進行約束分析. 亦即碰撞響應. Bullet 采用的是 Sequential Impulse ConstraintSolver(http://www.gphysics.com/archives/28 ) 約束分析是一個非常復雜的話題,涉及到 PGS 算法的簡化,后文會有介紹. 約束分析會根據所設定的約束類型來計算碰撞后各個對象所對應的位置,速度等, 然后與渲染引擎同步 motion state.

碰撞響應

相關資料

教材

視頻

Date: [2018-10-25 Thu 14:05]

Author: fhln

Created: 2018-10-25 Thu 19:02

Validate


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM