I am applying a force and a torque on an node. This is my code:
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)
Run Code Online (Sandbox Code Playgroud)
该物体现在倒下并随后从左向右移动.我希望它从右向左移动(基本上反映了第一次移动穿过y轴).我发现我对前两行代码的处理很少,因为力没有x分量.最后一行applyTorque
是我需要操纵的那一行.如果矢量有4个分量,你如何在y轴上绘图?我对数学有点生疏
applyTorque函数的更完整版本看起来像这样:
.applyTorque(SCNVector4Make(x:, y:, z:, w:), impulse:)
Run Code Online (Sandbox Code Playgroud)
因此,您放在第二个位置的任何数字都应该是围绕y轴的扭矩量.
数字与它们在物体上的旋转力方面创造的关系可能存在关系,但我总是只是使用反复试验找到有效的方法.有时它是巨大的数字.
我假设 x 轴是水平的,y 轴是垂直的,z 轴直接指向您(请参见下面的黑色箭头):
我发现有证据表明 SceneKit 中确实存在这种情况。
如果
applyTorque(SCNVector4Make(x, y, z, w), impulse: boolean)
Run Code Online (Sandbox Code Playgroud)
是正确的用法,那么x
是绕 x 轴逆时针旋转的量(参见绿色圆圈箭头),对于y
和 也是如此z
。同样,这是我最好的猜测,SceneKit 可能使用顺时针旋转。因此,x
、y
、 和z
一起确定扭转力的旋转轴。
这是一种更简单的思考方式。 x
、y
、 并z
在上述 3D 空间中创建一个向量。对象将围绕该向量逆时针旋转。
w
另一方面, 是扭矩的大小,与旋转轴无关。
您对“沿 y 轴映射矢量”的请求实际上是沿 yz 平面的反射。如果您考虑一下,您想要的是绕 y 轴沿相反方向旋转(negate y
),z 轴也是如此。
所以答案应该是:
myNode?.physicsBody?.applyTorque(SCNVector4Make(4, -2, -2.5, 1.6), impulse: true)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
315 次 |
最近记录: |