gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:44:45 24 4
gpt4 key购买 nike

当用户点击屏幕时,我想创建一个新的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)
}


如果要将“节点” 2m放在某个“ cameraNode”的前面,可以这样称呼:

let position = SCNVector3(x: 0, y: 0, z: -2)
updatePositionAndOrientationOf(node, withPosition: position, relativeTo: cameraNode)


编辑:获取相机节点

要获取相机节点,取决于您使用的是SCNKit,ARKit还是其他框架。以下是ARKit和SceneKit的示例。

使用ARKit,您可以使用ARSCNView来渲染与摄像机内容重叠的SCNScene的3D对象。您可以从ARSCNView的pointOfView属性获取相机节点:

let cameraNode = sceneView.pointOfView


对于SceneKit,您具有一个SCNView,可呈现SCNScene的3D对象。您可以创建相机节点并将其放置在所需的任何位置,因此您可以执行以下操作:

let scnScene = SCNScene()
// (Configure scnScene here if necessary)
scnView.scene = scnScene
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10) // For example
scnScene.rootNode.addChildNode(cameraNode)


设置摄像机节点后,您可以使用与ARKit相同的方式访问当前摄像机:

let cameraNode = scnView.pointOfView

关于swift3 - 将SceneKit对象放置在SCNCamera当前方向的前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42029347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com