前面说了, 这一系列是针对c++&3D的, 所以排除Box2D之类的2D引擎.
3D版的, 目前最流行的有3个:
这个是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里使用
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的版本, 只需要增加对应的配置就可以了, 十分方便