從Native到Web(四), NaCl學習筆記: 物理引擎

來源:互聯網
上載者:User
物理引擎的抉擇前面說了, 這一系列是針對c++&3D的, 所以排除Box2D之類的2D引擎.3D版的, 目前最流行的有3個:
  • Havok: 說它是最NB的毫不為過. 但是要錢, 不給錢人家才不鳥你呢. 免費版本只有Win32, 所以排除
  • PhysX: 目前佔有率最高, 跟遊戲開發商合作比較好. NaCl版本沒看到有, 所以排除
  • Bullet: 開源. 想跨平台, 還是開源的東西比較靠譜, 一切盡在掌握. 已經有前人做了一些NaCl的移植工作了

這個是Bullet的NaCl版本示範: http://bulletphysics.org/nacl/

代碼在這裡: https://github.com/erwincoumans/experiments.git

依賴的版本比較老了, 所以需要取pepper_15版本:

看到這個我就想罵娘了. 你說你開個斯巴達就開吧, 幹嘛不讓我們寫程式啊~

不說了, 你們懂的, 會被和諧的

所以用另找一個吧. 在Chrome Store裡找到另一個版本: 

從說明裡找到代碼: https://github.com/johnmccutchan/NaClAMBase.git

有興趣的可以看看這個東西的視頻講解: Native Client Acceleration Modules, HTML5+NaCl

我們這裡只關心Bullet怎麼在NaCl裡使用

編譯運行
  1. 從github上Clone下來
  2. 開啟NaClAMBase/NaClAM.sln
  3. Configuration裡沒有PPAPI這個平台, 沒法用VS調試, 所以加一種配置
  4. 把NaClAMBullet設定為啟動工程, 另外幾個改成lib編譯, 並加入它的依賴
  5. 參考NaCl64的配置把include目錄設定一下
  6. 編譯發現<sys/time.h>在PPAPI下找不到, 所以寫個替代品:
    #if defined(_MSC_VER) || defined(_WINDOWS_)#include <windows.h>   #include <time.h>#else   #include <sys/time.h>#endif #if defined(_MSC_VER) || defined(_WINDOWS_)   inline int gettimeofday(struct timeval* tv, void*)    {      union {         long long ns100;         FILETIME ft;      } now;           GetSystemTimeAsFileTime (&now.ft);      tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);      tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);     return (0);   }#endif
  7. OK, 調試運行:
總結

這個DEMO的渲染部分是使用HTML5做的, 頁面互動與C++這邊的通訊則是通過Json, 是一個不錯的案例這種思路比較值得借鑒: 高效能的部分使用NaCl, 表現部分使用Web開發人員更熟悉的HTML5不過, 想要渲染效能高, 還是把3D部分也用NaCl實現的好另外, VS2010的屬性工作表配置真是方便, 安裝過NaCl的外掛程式後, 在c:\Users\[USERNAME]\AppData\Local\Microsoft\MSBuild\v4.0\下會有NaCl32, NaCl64, PPAPI的配置. 所以, 把現有的C++工程轉換成NaCl的版本, 只需要增加對應的配置就可以了, 十分方便

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.