添加SCNBillboardConstraint会使节点消失
在我在文档和互联网上阅读之后, SCNBillboardConstraint
将一个节点旋转到始终面向pointOfView节点 – 在ARKit
的情况下,用户的相机。
问题是,当我将SCNBillboardConstraint
添加到子节点时,它会消失。 节点只是一些SCNTexts
添加为更复杂模型的子代。 层次结构如下所示:RootNode – > Text节点(其中两个)。
在我将根节点添加到场景的根节点之后,我按以下方式添加此约束:
updateQueue.async { self.sceneView.scene.rootNode.addChildNode(virtualObject) self.sceneView.addOrUpdateAnchor(for: virtualObject) self.addBillboardContraintsToText(object: virtualObject) } func addBillboardContraintsToText(object: VirtualObject) { guard let storeNode = object.childNodes.first else { return } for node in storeNode.childNodes { if let geometry = node.geometry, geometry.isKind(of: SCNText.self) { let billboard = SCNBillboardConstraint() node.constraints = [billboard] } } }
文本节点的位置相对于其根节点设置正确,因此没有问题。 当我添加SCNLookAtConstraint
,它工作得很好。
node.pivot = SCNMatrix4Rotate(node.pivot, Float.pi, 0, 1, 0) let lookAt = SCNLookAtConstraint(target: sceneView.pointOfView) lookAt.isGimbalLockEnabled = true node.constraints = [lookAt]
任何想法为什么SCNBillboardConstraint
可能无法正常工作? 难道我做错了什么?
此代码(带有Apple CupScn)对我来说效果很好:
cupNode.position = SCNVector3(0.5,0,-0.5) guard let virtualObjectScene = SCNScene(named: "cup.scn", inDirectory: "Models.scnassets/cup") else { return } let wrapperNode = SCNNode() for child in virtualObjectScene.rootNode.childNodes { child.geometry?.firstMaterial?.lightingModel = .physicallyBased wrapperNode.addChildNode(child) } cupNode.addChildNode(wrapperNode) scene.rootNode.addChildNode(cupNode) let billboardConstraint = SCNBillboardConstraint() billboardConstraint.freeAxes = SCNBillboardAxis.Y cupNode.constraints = [billboardConstraint]