从Havok换到Bullet后, 最大的不适应就是各种btCollisionShape默认是以中心为齐的
举个栗子:
Box只有extent, 没有center. 那么创建质心不在原点的Box碰撞体就会有种蛋蛋的忧伤
在生成Ragdoll时, 更奇葩的btCapsuleShape竟然中心也是在原点, 这让我如何把碰撞体对齐到Bone的LocalSpace啊? 这不仅是忧伤了, 还疼!
后来被逼成了使用btMultiSphereShape代替, 用两个蛋形定义Capsule的两端
今天回来重构时, 手贱google了一下, 原来还有个btCompoundShape! 所以, 上面的问题都变成了:
btCollisionShape* boxShape = new btBoxShape(btVector3(2.f,2.f, 2.0f)); btCompoundShape* compound = new btCompoundShape(); btTransform localTrans; localTrans.setIdentity(); //localTrans effectively shifts the center of mass with respect to the chassis localTrans.setOrigin(btVector3(0,0,1)); compound->addChildShape(localTrans,boxShape);
怪不得PhysX成了市场占有率第一的物理引擎, 看来不是没有道理的