ios - 如何在两点之间显示(添加)平面文本节点?
解决方案
这是一个简单的原则,如何在两点之间放置带有 3D 文本的标签。
let p1 = SCNNode() // POINT 1
p1.geometry = SCNSphere(radius: 0.3)
p1.position = SCNVector3(-1, -2, -3)
p1.geometry?.firstMaterial?.diffuse.contents = NSColor.red
scene.rootNode.addChildNode(p1)
let p2 = SCNNode() // POINT 2
p2.geometry = SCNSphere(radius: 0.2)
p2.position = SCNVector3(4, 5, 6)
p2.geometry?.firstMaterial?.diffuse.contents = NSColor.red
scene.rootNode.addChildNode(p2)
let x = (p1.position.x + p2.position.x) / 2
let y = (p1.position.y + p2.position.y) / 2
let z = (p1.position.z + p2.position.z) / 2
let label = SCNNode()
let text = SCNText(string: "label", extrusionDepth: 5)
label.geometry = text
// Shifting text's pivot to its center. Default pivot's position is lower left corner.
label.simdPivot.columns.3.x = Float((text.boundingBox.min.x +
text.boundingBox.max.x) / 2)
label.simdPivot.columns.3.y = Float((text.boundingBox.min.y +
text.boundingBox.max.y) / 2)
label.scale = SCNVector3(0.02, 0.02, 0.02)
label.position = SCNVector3(x, y, z)
label.geometry?.firstMaterial?.diffuse.contents = NSColor.red
scene.rootNode.addChildNode(label)
let constraint = SCNBillboardConstraint()
label.constraints = [constraint]
let plane = SCNNode()
plane.geometry = SCNPlane(width: 2, height: 1)
plane.position = SCNVector3(x, y, z)
plane.geometry?.firstMaterial?.diffuse.contents = NSColor.white
scene.rootNode.addChildNode(plane)
plane.constraints = [constraint]
您可以添加
ARAnchor
和附加任何内容的相同方式label
。
推荐阅读
- azure - Azure 中的服务计划和应用服务计划有什么区别?
- gutenberg-blocks - 古腾堡定制柱块开发
- java - Java - 解析列表
成字符串 - python - django 将 csv 附加到电子邮件中
- java - 正则表达式匹配显示超过 3 周的条目
- c++ - 在 C/C++ mscoree.tlh 错误中加载 C# 程序集
- drupal-8 - kint 内容将我重定向到安装页面
- c# - 是否可以从另一个类的方法中获取多个值?
- javascript - 从 Buffer 中解压缩文件,而不在 NodeJS 中的磁盘上的任何位置保存文件
- javascript - 在 django 模板中实时显示控制台输出