gpt4 book ai didi

ios - 添加 SCNBillboardConstraint 使节点消失

转载 作者:IT王子 更新时间:2023-10-29 05:38:20 24 4
gpt4 key购买 nike

根据我在文档和互联网上阅读的内容,SCNBillboardConstraint 将旋转节点以始终面向 pointOfView 节点 - 在 ARKit 的情况下,用户的相机。

问题是,当我将 SCNBillboardConstraint 添加到子节点时,它消失了。这些节点只是作为更复杂模型的子项添加的一些 SCNTexts。层次结构看起来像这样:RootNode -> 文本节点(其中两个)。

在我将根节点添加到场景的根节点之后,我按以下方式添加此约束:

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 可能不起作用吗?我做错了什么吗?

最佳答案

此代码(使用苹果 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]

关于ios - 添加 SCNBillboardConstraint 使节点消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194597/

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