使用ARKit将SCNText添加到SCNScene

时间:2017-06-24 07:10:58

标签: 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)

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

修改

我看到了那段文字,但由于我还没有设置飞机(或锚),我无法看到它,好像我在那个文本前面。我能怎么做?

1 个答案:

答案 0 :(得分:8)

这里至少有两个问题。

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

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

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

SCNText的默认字体大小类似于16.但是场景单位和场景单位映射到ARKit中的米。此外,“文本框”固定在其左下方。所以很可能你的文字不可见,因为它高16米,在你的右边。

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