Javascript 如何在Cannon.js中对对象实体(父对象/子对象)进行分组?

Javascript 如何在Cannon.js中对对象实体(父对象/子对象)进行分组?,javascript,three.js,cannon.js,Javascript,Three.js,Cannon.js,我搜索了所有地方,很好地查找了问题和文档,但似乎由于在两个炮弹之间创建了约束,所以无法对不同质量的形状进行分组(例如) 目前我使用的是lockConstraint,但这是一种技巧…有时,当我的对象发生碰撞时,“子”对象的旋转突然在不需要的位置旋转 有没有更合适的方法 编辑:我想要实现的是:我创造了一辆车,我希望他的重心在4个车轮的中心。 为此,我创建了一个车身,其.collisionResponse设置为0,质量为我想要的质量,并将其放置在车轮中心。 然后我创建了一个质量很小的底盘和新的CANN

我搜索了所有地方,很好地查找了问题和文档,但似乎由于在两个炮弹之间创建了约束,所以无法对不同质量的形状进行分组(例如)

目前我使用的是
lockConstraint
,但这是一种技巧…有时,当我的对象发生碰撞时,“子”对象的旋转突然在不需要的位置旋转

有没有更合适的方法

编辑:我想要实现的是:我创造了一辆车,我希望他的重心在4个车轮的中心。 为此,我创建了一个车身,其
.collisionResponse
设置为0,质量为我想要的质量,并将其放置在车轮中心。
然后我创建了一个质量很小的底盘和新的
CANNON.LockConstraint(chassisBody,mass,0.5)
,它允许对两个对象进行“分组”。

无法在CANNON.js中设置每个形状的质量/密度。但是,可以将重心移近较重的形状以获得等效效果

锤子就是一个很好的例子,因为锤头的密度比典型锤子的轴大得多。如果你扔一把锤子,它会绕着靠近锤头的一个点旋转,因为锤头比锤柄重

要在cannon.js中制作锤子,可以使用两个盒子

var head = new CANNON.Box(new CANNON.Vec3(2,1,1));
var shaft = new CANNON.Box(new CANNON.Vec3(0.5,3,0.5));
现在,要将形状组合成一个实体,您可以执行以下操作:

var body = new CANNON.Body({ mass: 1 });
body.addShape(shaft, shaftPosition);
body.addShape(head, headPosition);
根据所使用的形状位置(轴位置、头部位置),可以局部更改它们在身体中的位置,同时更改它们相对于质心(也称为旋转中心)的位置。 设置headPosition=(0,0,0)和shaftPosition=(0,3,0)将使锤子在投掷锤子时绕着锤头旋转。然而,如果你把它放在另一个方向,锤子会绕着轴的中心旋转。。。看起来头部和轴的密度相似。尝试不同的位置,找到相对于形状的完美旋转中心

Body#addShape的完整签名允许您添加一个完整的刚性变换,以将形状定位在身体内。它是:

body.addShape(shape, position, quaternion);

你能描述一下你想要达到的目标吗?@schteppe非常感谢你的关注,我已经编辑了我的答案。伟大的thx为您的工作和自由兄弟!谢谢需要明确的是,在制造车辆时,如何移动底盘主体的重心?是的,但这只是一个示例。我也许应该发布两个问题?但我认为“分组”和改变质心可以做同样的事情。