通过关节连接的两个物理物体之间的拉力

问题描述 投票:1回答:2

我想做什么:

我创建了两个SCNNode和对应的SCNPhysicsBody(都是动态的并且受重力影响),我想使用SCNPhysicsHingeJoint将它们连接起来。为了进行测试,node1还有一个附加的关节,以便固定到场景中,并且不会由于重力而掉落。节点之间通过joint相互连接。因此,当我开始场景时,node1只是固定在场景中,而node2则向下悬挂。现在我想确定拉在关节上的力应该等于-9.8(假设没有摆动),因为gravitational acceleration is equals -9.8gravity属性的默认值)并且默认质量等于1,其中力拉关节应该使-9.8。我不想计算该拉力,因为我的场景本来会变得更加复杂。 因此,我想知道是否存在一种属性或方法来计算两个节点之间的拉力,以及通过关节连接的物理物体?]

let node1 = SCNNode(geometry: SCNCylinder(radius: 0.125, height: 2))
node1.position.x = -1.625
node1.rotation = SCNVector4(1, 0, 0, Float.pi/2)
node1.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry: node1.geometry!, options: nil))
node1.physicsBody!.isAffectedByGravity = true
node1.physicsBody!.categoryBitMask = 1
node1.physicsBody!.contactTestBitMask = 1
node1.physicsBody!.collisionBitMask = 1
rootNode.addChildNode(node1)

let node2 = SCNNode(geometry: SCNBox(width: 3, height: 0.25, length: 2, chamferRadius: 0))
node2.physicsBody = SCNPhysicsBody(type: .dynamic, shape: SCNPhysicsShape(geometry: node2.geometry!, options: nil))
node2.physicsBody!.isAffectedByGravity = true
node2.physicsBody!.categoryBitMask = 1
node2.physicsBody!.contactTestBitMask = 1
node2.physicsBody!.collisionBitMask = 1
rootNode.addChildNode(node2)

let irrelevantJoint = SCNPhysicsHingeJoint(body: node1.physicsBody!, axis: SCNVector3(0, 1, 0), anchor: SCNVector3(0, 0, -0.125))
physicsWorld.addBehavior(irrelevantJoint)

let joint = SCNPhysicsHingeJoint(bodyA: node1.physicsBody!, axisA: SCNVector3(0, 1, 0), anchorA: SCNVector3(0, 0, 0.125),
                                 bodyB: node2.physicsBody!, axisB: SCNVector3(0, 0, 1), anchorB: SCNVector3(-1.5, 0, 0))
physicsWorld.addBehavior(joint)

我尝试过的事情:

我希望我可以使用SCNPhysicsContactDelegatephysicsWorld(_:didEnd:)来获得对joint的作用力(或冲量)。每当创建该方法时,都会创建一个SCNPhysicsContact,使您可以访问其collisionImpulse属性,因此我一直希望不是这样的负冲动。我刚好得到collisionImpulse为0。关于如何获得通过关节连接的两个物理物体之间的拉力的任何想法?

[我正在尝试做的事情:我创建了两个SCNNodes和相应的SCNPhysicsBody(都是动态的并且受重力影响),我想使用SCNPhysicsHingeJoint连接它们。只是为了测试事物...

swift scenekit game-physics
2个回答
1
投票

游戏物理模拟不需要简单关节中的力计算。这些是几何约束,并且可以通过求解器迭代来实现收敛。力计算是一项额外的开销,它花费了计算时间,并且在全面求解器中将显式启用,默认情况下禁用。并非所有求解器都具有该功能,并且查看SCNPhysicsWorld时,我看不到任何迹象,因此,我很确定它没有实现。


1
投票

如isp-zax所述,您可以使用由经过的时间决定的增量v,从而确定加速度。

© www.soinside.com 2019 - 2024. All rights reserved.