加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:46:19 所属栏目:百科 来源:网络整理
导读:我想在用户点击屏幕时创建一个新的SceneKit节点,并让它以预定距离直接出现在摄像机前面.对于测试,这将是一个SCNText读
我想在用户点击屏幕时创建一个新的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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读