swift3 – 将SceneKit对象放在SCNCamera当前方向的前面

前端之家收集整理的这篇文章主要介绍了swift3 – 将SceneKit对象放在SCNCamera当前方向的前面前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在用户点击屏幕时创建一个新的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)

猜你在找的Swift相关文章