最近除了看一些技术书籍以及写毕业论文之外,主要研究的是Box2D物理引擎,细细数来,差不多有一个月了,所以在这里做一个备忘录。
与PhysX类似,物理模型的主要类型也是分为dynamic、kinematic、static三个部分,只要稍微改一下属性值,三个之间便可以改变,不过我建议不要改变物体的物理类型。至于其他信息,大家可以参考它的英文手册,整体还是非常好理解的,我用了两天时间就在实习公司的UI上写出了第一个程序。下面我主要讲的是一些编程时应该注意的问题:
1、很多引擎在计算旋转矩阵时使用的都是弧度,而不是角度,box2D也不例外;
2、box2D的单位是米,如groundBox.SetAsBox(50.0f, 10.0f)语句表示建立宽为100米,高为2米的物体,之所以这样设置是因为在计算物理方程时使用的单位为米-千克-秒。box2D规定物理模型的大小最好在0.1-10之间,静态物体可以在50左右。超过这个范围会怎样呢,牛仔做过很多实验,发现你所创建的所有物体的速度都会比你预设的慢,而且setLinearVelocity等函数会部分失效。为什么说部分失效,是因为它会有一个峰值,而且这个峰值不会很大。这样物体虽然能够运动,但即使你把速度的length设置为1W以上,跑出来的速度可能也只是20,这点大家务必注意了。
3、如果牛仔没测试错的话,Box2D的坐标系采用的绘制旋转都是基于逆时针的坐标系。在用UI绘制时需要注意坐标系镜像,因为很多UI的坐标系的原点在左上角且Y轴朝下,如Qt。如果用渲染API应该不会存在这个问题,比如OpenGL等,可以用viewport来调整视窗的大小,非常方便。
嗯,感觉2D引擎跟3D引擎比,专业术语其实差不多,设计理念也差不多,不过3D会涉及到一些更负责的元素,如牛仔研究过的布料、ragdoll等等。Ok,希望能跟你一起探讨,共同进步,我的打砖块游戏已经设计好了。