5

我刚开始学习 ARKitexample 和 Scenekit。我阅读了一些 Scenekit,发现为了添加文本,我需要使用 SCNText。

我试着这样写,但没有显示出来。

    guard let pointOfView = sceneView.pointOfView else { return }

    let text = SCNText(string: "Hello", extrusionDepth: 4)
    let textNode = SCNNode(geometry: text)
    textNode.geometry = text
    textNode.position = SCNVector3Make(pointOfView.position.x, pointOfView.position.y, pointOfView.position.z)
    sceneView.scene.rootNode.addChildNode(textNode)

当用户按下按钮时,我只想在 SCNScene 上添加一些文本(如“hello world”)。

编辑

我看到了那个文本,但由于我没有设置平面(或锚点),所以我不能像在那个文本前面一样看待它。我能怎么做?

4

1 回答 1

8

你在这里至少有两个问题。


如果您将节点的位置设置为与相机的位置匹配,您可能不会看到该节点的任何内容。你想把东西放在相机前面,让它们被看到。相机总是朝其局部空间的 -z 方向看。有很多方法可以进行必要的数学运算,但这里有一个可能很方便(在电话上编码,所以 YMMV):

textNode.simdPosition = pointOfView.simdPosition + pointOfView.simdWorldFront * 0.5

这应该将您的对象放在相机前面半米处(或者更确切地说,相机当时所在的位置 - 它不会跟随相机)。它之所以起作用,simdWorldFront是因为向量 (0,0,-1),在局部空间中表示相机节点指向的方向,从局部空间转换为世界空间。


默认字体大小为SCNText16 左右。但这是在场景单位中,并且场景单位映射到 ARKit 中的米。此外,“文本框”固定在其左下方。因此很可能您的文字不可见,因为它有 16 米高并且在您的右侧。

处理此问题的一种简单方法是在节点上设置一个scalepivot,使其内容更小。

于 2017-06-25T01:01:47.630 回答