使用ARKit将SCNText添加到SCNScene

Kha*_*inn 5 scenekit arkit

我刚开始学习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)
Run Code Online (Sandbox Code Playgroud)

我只想在用户按下按钮时在SCNScene上添加一些文本(如"hello world").

编辑

我看到那个文字,但由于我没有设置平面(或锚),我不能把它看作好像我在那个文本前面.我能怎么做?

ric*_*ter 8

你这里至少有两个问题.


如果将节点的位置设置为与摄像机的位置匹配,则可能看不到该节点的任何内容.你想把东西放在相机前面让他们看到.摄像机始终朝向其本地空间的-z方向.有很多方法可以做必要的数学运算,但这里有一个方便的(在电话上编码,所以YMMV):

textNode.simdPosition = pointOfView.simdPosition + pointOfView.simdWorldFront * 0.5
Run Code Online (Sandbox Code Playgroud)

这应该将您的物体放在相机前半米处(或者更确切地说,相机在那一刻 - 它不会跟随相机).它的工作原理是因为simdWorldFront是矢量(0,0,-1),它在局部空间中表示相机节点指向的方向,从局部空间转换为世界空间.


默认字体大小为SCNText16,但是在场景单元中,场景单元映射到ARKit中的米.此外,"文本框"固定在其左下方.所以很可能你的文字不可见,因为它高16米,在你的右边.

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