微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐