根据我在文档和网络上所了解到的,SCNBillboardConstraint
可以使节点始终面向视点节点-在ARKit
中是用户的相机。
问题在于,当我将一个SCNBillboardConstraint
添加到子节点时,它会消失。这些节点只是作为更复杂模型的子节点添加的一些SCNTexts
。
层级关系看起来像这样:根节点 - >文本节点(其中有两个)。
就在我将根节点添加到场景的根节点后,我用以下方式添加了此约束:
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
可能不起作用?我做错了什么吗?
SCNBillboardConstraint
,则带有SCNText
的SCNode
不会出现。 - MDompekidis