我想在用户点击屏幕时创建一个新的SceneKit节点,并让它以预定距离直接出现在摄像机前面.对于测试,这将是一个SCNText读取“你在这里点击”的读数.它也应该与视线成直角 – 也就是说,“面向相机”.
所以,鉴于self.camera.orientation SCNVector4(或类似),我怎么能:
>生成SCNVector3,将节点置于摄像机的“前方”给定距离?
>生成SCNVector4(或SCNQuaternion),它定向节点,使其“面向”相机?
我怀疑(2)的答案是它与`self.camera.orientation相同?但是(1)让我有点失落.
我看到了许多类似的问题,比如this one,但没有答案.
(斯威夫特4)
嘿,如果要将对象放在相对于另一个节点(例如摄像机节点)的某个位置,并且与参考节点的方向相同,则可以使用这个更简单的函数:
func updatePositionAndOrientationOf(_ node: SCNNode,withPosition position: SCNVector3,relativeTo referenceNode: SCNNode) { let referenceNodeTransform = matrix_float4x4(referenceNode.transform) // Setup a translation matrix with the desired position var translationMatrix = matrix_identity_float4x4 translationMatrix.columns.3.x = position.x translationMatrix.columns.3.y = position.y translationMatrix.columns.3.z = position.z // Combine the configured translation matrix with the referenceNode's transform to get the desired position AND orientation let updatedTransform = matrix_multiply(referenceNodeTransform,translationMatrix) node.transform = SCNMatrix4(updatedTransform) }
如果您想将’node’2m放在某个’cameraNode’前面,你可以这样称呼:
let position = SCNVector3(x: 0,y: 0,z: -2) updatePositionAndOrientationOf(node,withPosition: position,relativeTo: cameraNode)