平台:Win7,VS2010
1. Bullet庫的組織
下圖是Bullet_User_Manual中的截圖:
從中可見,Bullet的LinearMath(線性數學模塊),其上是BulletCollision(碰撞檢測模塊),然后BulletDynamics(剛體模擬模塊)和BulletSoftBody(可變形體模擬模塊)建立在BulletCollision之上,另外還有可選的導入導出插件和多線程模塊。LinearMath、BulletCollision、BulletDynamics、BulletSoftBody是核心模塊,其他則是可選的(當你需要插件或使用多線程時使用)。我們這里只編譯核心模塊,其實LinearMath、BulletCollision、BulletDynamics、BulletSoftBody對應4個.lib文件(庫文件)。
鑒於Bullet的模塊化組織,用戶可以分層次的使用Bullet:
- Collision detection,這時只需包含LinearMath、BulletCollision庫;
- Rigid body dynamics,需包含LinearMath、BulletCollision、BulletDynamics庫;
- Soft body dynamics,包含全部4個LinearMath、BulletCollision、BulletDynamics、BulletSoftBody庫。
對於我們而言,可能用到可變形體,所以要編譯全部4個模塊。
2. Bullet安裝指導
這是高層指導:
- 下載bullet-2.82-r2704.zip,解壓(r后面的數字可能不同);
- 運行“../build/vs2010.bat”,生成VS2010工程;
- 用VS2010打開“../vs2010/0BulletSolution.sln”;
- 對LinearMath、BulletCollision、BulletDynamics、BulletSoftBody,分別在Debug和Release配置下編譯(更多版本及解釋見這里);
- 將“../lib”下的8個.lib文件,以及“../src”下所有.h文件,都拷貝出來即構成安裝包。
后面第4節會step by step講解這個過程,並配有截圖。下一節將如何配置Bullet工程。
3. Bullet工程配置(使用Bullet庫)
要使用Bullet,需要:
- 添加包含目錄,將上一節拷貝的.h文件所在目錄添加到工程的包含目錄(在所有配置下);
- 添加庫目錄,將上一節拷貝的.lib文件所在目錄添加到工程庫目錄(在所有配置下);
- 引用庫,添加對.lib文件的引用(根據使用層次添加所需.lib文件,Debug和Release分別設置);
- 包含頭文件,在代碼中包含“btBulletDynamicsCommon.h”。
注:
添加包含目錄的兩種方法:
- “項目屬性 >> 配置屬性 >> VC++目錄 >> 包含目錄”
- “項目屬性 >> 配置屬性 >> C/C++ >> 常規 >> 附加包含目錄”。
添加庫目錄的兩種方法:
- “項目屬性 >> 配置屬性 >> VC++目錄 >> 庫目錄”
- “項目屬性 >> 配置屬性 >> 鏈接器 >> 常規 >> 附加庫目錄”。
引用庫的兩種方法:
- 代碼#pragma comment (lib, "xxx.lib")(用#ifdef _DLL和#ifdef _DEBUG);
- “項目屬性 >> 配置屬性 >> 鏈接器 >> 輸入 >> 附加依賴項”。
.lib文件版本問題參見我的另一篇文章:配置自己的OpenGL庫,glew、freeglut庫編譯,庫沖突解決。
4. Step by step
咱們從生成的.sln文件開始吧:
打開0BulletSolution.sln:
分別在Debug和Release配置下生成上面截圖中的4個項目。更多版本見:配置自己的OpenGL庫,glew、freeglut庫編譯,庫沖突解決。注意,Bullet工程里的Debug和Release都是使用靜態CRT(我們一般用的是DLL CRT),所以,有必要多編譯2個版本。編譯后得到.lib文件,可以根據編譯版本自行改文件名:
構建安裝包如下:
參考文獻:
Bullet 2.82 Physics SDK Manual(在下載的Bullet包中)
http://bulletphysics.org/mediawiki-1.5.8/index.php/Creating_a_project_from_scratch