ARKit - 在用户 Phone 方向施加力
ARKit - Applying Force in User's Phone Direction
我有以下创建 SCNBox 并将其投射到屏幕上的代码。这行得通,但是只要我将 phone 转向任何其他方向,力脉冲就不会更新,它总是将盒子射到相同的旧位置。
代码如下:
@objc func tapped(recognizer :UIGestureRecognizer) {
guard let currentFrame = self.sceneView.session.currentFrame else {
return
}
/
let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)
let material = SCNMaterial()
material.diffuse.contents = UIColor.red
material.lightingModel = .constant
var translation = matrix_identity_float4x4
translation.columns.3.z = -0.01
let node = SCNNode()
node.geometry = box
node.geometry?.materials = [material]
print(currentFrame.camera.transform)
node.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
node.physicsBody?.applyForce(SCNVector3(0,2,-10), asImpulse: true)
self.sceneView.scene.rootNode.addChildNode(node)
}
第 26 行是我施加力的地方,但它没有考虑用户当前的 phone 方向。我该如何解决?
在第 26 行,您将一个常量向量传递给 applyForce
。该方法在世界 space 中采用一个矢量,因此传递一个常量矢量意味着您始终在同一方向上施加力 — 如果您想要一个基于相机或其他东西指向的方向的方向,您需要根据该方向计算一个向量。
(新)SCNNode 属性 worldFront
在这里可能会有所帮助 — 它为您提供节点指向的方向,自动转换为世界 space,因此它对物理很有用方法。 (尽管您可能想要缩放它。)
我有以下创建 SCNBox 并将其投射到屏幕上的代码。这行得通,但是只要我将 phone 转向任何其他方向,力脉冲就不会更新,它总是将盒子射到相同的旧位置。
代码如下:
@objc func tapped(recognizer :UIGestureRecognizer) {
guard let currentFrame = self.sceneView.session.currentFrame else {
return
}
/
let box = SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0)
let material = SCNMaterial()
material.diffuse.contents = UIColor.red
material.lightingModel = .constant
var translation = matrix_identity_float4x4
translation.columns.3.z = -0.01
let node = SCNNode()
node.geometry = box
node.geometry?.materials = [material]
print(currentFrame.camera.transform)
node.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
node.simdTransform = matrix_multiply(currentFrame.camera.transform, translation)
node.physicsBody?.applyForce(SCNVector3(0,2,-10), asImpulse: true)
self.sceneView.scene.rootNode.addChildNode(node)
}
第 26 行是我施加力的地方,但它没有考虑用户当前的 phone 方向。我该如何解决?
在第 26 行,您将一个常量向量传递给 applyForce
。该方法在世界 space 中采用一个矢量,因此传递一个常量矢量意味着您始终在同一方向上施加力 — 如果您想要一个基于相机或其他东西指向的方向的方向,您需要根据该方向计算一个向量。
(新)SCNNode 属性 worldFront
在这里可能会有所帮助 — 它为您提供节点指向的方向,自动转换为世界 space,因此它对物理很有用方法。 (尽管您可能想要缩放它。)