子弹物理-定向刚体
Bullet Physics - Orienting a rigid body
本文关键字:子弹 更新时间:2023-10-16
我正在尝试确定子弹头中圆柱体的方向。现在,圆柱体是模拟中唯一的对象。我在这里找到了一些答案,相信我已经接近了,但仍然没有轮换。这是我创建圆柱体的函数,也许有东西会跳到某人身上。
我做错了什么?
void CreateCylinder(int index, double x, double y, double z, double radius, double length, int yaw, int pitch, int roll) {
btScalar mass = 1;
btVector3 position(x,y,z);
btVector3 cylInertia(0,0,0);
//create collision shape
btCollisionShape* cylColl = new btCylinderShape(btVector3(radius,length,1));
//default motion state
btDefaultMotionState* ms = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1), btVector3(0,10,0)));
//calculate inertia
cylColl->calculateLocalInertia(mass, cylInertia);
//construction info
btRigidBody::btRigidBodyConstructionInfo cylCI(
mass,
ms,
cylColl, //collision shape
cylInertia //inertia
);
btRigidBody *cylinder = new btRigidBody(cylCI);
//orient cylinder
btTransform tr;
tr.setIdentity();
btQuaternion quat;
quat.setEuler(yaw,pitch,roll); //or quat.setEulerZYX depending on the ordering you want
tr.setRotation(quat);
//apply transform to cylinder rigid body
cylinder->setCenterOfMassTransform(tr);
body[index] = cylinder;
m_dynamicsWorld->addRigidBody(body[index]);
}
您必须修改Body的WorldTransform
,而不是CenterOfMassTransform
。可以在DefaultMotionState中执行此操作,也可以在实体本身上执行此操作。
相关文章:
- 向有射程的敌人发射子弹
- SFML 子弹未生成
- 子弹 - 刚体初始旋转/平移
- 在这个1D C++游戏中射出多颗子弹
- 在尝试执行触摸和保持(子弹发射)时卡住了?-椰子2d-x
- 子弹物理 "setLinearVelocity"不动
- Short Int基掩码在C 库子弹中的工作方式
- 如何在子弹物理学中让刚体的欧拉旋转在 0 到 360 之间
- 子弹物理刚体从表面上反弹
- 子弹物理-定向刚体
- 如何绘制/渲染子弹物理碰撞体/形状
- 子弹物理:刚体碰撞启用,物理禁用
- 碰撞后移除物体(子弹物理)
- 两个实体之间的子弹碰撞回调
- 子弹车车轮落后,底盘倾斜方向错误
- 预测子弹击中的位置
- 替换子弹物理中的刚体模拟
- 在网格细胞游戏中查找子弹轨迹上的所有细胞
- 当我链接子弹物理时编译错误
- 如何在子弹物理中控制玩家角色