gpt4 book ai didi

ios - 如何在Scenekit中的3D模型上添加文字(注释)?

转载 作者:行者123 更新时间:2023-11-29 06:01:22 26 4
gpt4 key购买 nike

我使用 Scenekit 在我的应用程序中展示了 3D 模型。该模型可以通过手势旋转、缩放、移动。现在我需要在屏幕上添加一些注释来解释模型的每个部分是什么(例如心脏模块,包括心肌、血管......)。注释应该始终跟随模型的部分,当模型变换时,并且单词的大小不会改变,始终面向用户。但我不知道如何实现这一目标。

我的想法是使3D世界坐标到屏幕坐标,并在SCNView上添加UILabels,当模型变换时,更改UILabels框架。但我不知道如何进行坐标转换。当然,这可能是更好的方式,我不知道。谢谢。

最佳答案

此片段取自 ARKit 项目,但对于将文本标签附加到 SCNNode 并始终面向用户,这就是您所需要的 -

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
guard let featureAnchor = anchor as? FeatureAnchor else {
return nil
}
let feature = featureAnchor.feature

let billboardConstraint = SCNBillboardConstraint()
billboardConstraint.freeAxes = SCNBillboardAxis.Y

let sphere = SCNSphere(radius: Global.dotRadius)
sphere.firstMaterial?.transparency = Global.annotationTransparency
sphere.firstMaterial?.diffuse.contents = UIColor.yellow
sphere.firstMaterial?.specular.contents = UIColor.white
let node = SCNNode(geometry: sphere)
node.constraints = [billboardConstraint]

let text = SCNText(string: feature.description, extrusionDepth: Global.textDepth)
text.chamferRadius = Global.textDepth
text.firstMaterial?.transparency = Global.annotationTransparency
text.firstMaterial?.diffuse.contents = UIColor.green
text.firstMaterial?.specular.contents = UIColor.white
text.firstMaterial?.isDoubleSided = true
text.font = Global.textFont
text.alignmentMode = kCAAlignmentCenter

let (min, max) = text.boundingBox
let dx: Float = (max.x - min.x) / 2.0 // x = center
let dy: Float = min.y // y = bottom
let dz: Float = Float(Global.textDepth) / 2.0 // z = center

let textNode = SCNNode(geometry: text)
textNode.pivot = SCNMatrix4MakeTranslation(dx, dy, dz)
textNode.scale = SCNVector3Make(Global.textScale, Global.textScale, Global.textScale)

node.addChildNode(textNode)

return node
}

关于ios - 如何在Scenekit中的3D模型上添加文字(注释)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646210/

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