我在节点上施加力和扭矩。这是我的代码:
myNode?.physicsBody?.applyForce(SCNVector3Make(0, -6, 4), atPosition: SCNVector3Make(0, 1, -1), impulse: true)
myNode?.physicsBody?.applyForce(SCNVector3Make(0, -2, 10), impulse: true)
myNode?.physicsBody?.applyTorque(SCNVector4Make(4, 2, 2.5, 1.6), impulse: true)
物体现在倒下并随后从左向右移动。我希望它从右向左移动(基本上反映了第一次移动穿过y轴)。我发现我对前两行代码的处理很少,因为力没有x分量。最后一行applyTorque
是我需要操纵的那一行。如果矢量有4个分量,你如何在y轴上绘图?我对数学有点生疏
答案 0 :(得分:6)
applyTorque函数的更完整版本如下所示:
.applyTorque(SCNVector4Make(x:, y:, z:, w:), impulse:)
因此,您放在第二个位置的任何数字都应该是围绕y轴的扭矩量。
数字和它们在对象上的旋转力方面创造的关系可能存在关系,但我总是只是使用反复试验找到有效的方法。有时它是巨大的数字。
答案 1 :(得分:4)
我假设x轴是水平的,y轴是垂直的,z轴指向你(见下面的黑色箭头):
我发现evidence在SceneKit中确实是这种情况。
如果
applyTorque(SCNVector4Make(x, y, z, w), impulse: boolean)
是正确的用法,然后x
是围绕x轴逆时针旋转的量(请参阅绿色圆圈箭头),y
和z
也是如此。再次,这是我最好的猜测,SceneKit可能使用顺时针旋转。因此,x
,y
和z
共同决定了扭力的旋转轴。
这是一种更简单的思考方式。 x
,y
和z
在上述3D空间中创建了一个向量。对象将围绕此向量逆时针旋转。
w
是扭矩的幅度,与旋转轴无关。
您对"在y轴上映射矢量的请求"实际上是横跨yz平面的反射。如果你考虑一下,你想要的是围绕y轴旋转相反的方向(否定y
)和z相同的方向。
所以答案应该是:
myNode?.physicsBody?.applyTorque(SCNVector4Make(4, -2, -2.5, 1.6), impulse: true)
答案 2 :(得分:3)
根据SceneKit documentation,SCNVector4参数指定方向( x,y,z矢量分量)和幅度( w矢量分量以牛顿米为单位的力量。要反映所施加扭矩的方向,您所要做的就是反转幅度。 (x,y,z,-magnitude)