ARKit:将SCNText放置在相机前面的特定位置

时间:2017-06-29 15:02:53

标签: swift scenekit arkit

我设法将一个立方体(SCNNode)放置在指向相机的表面上,但是我发现很难做到将文本放在同一位置的简单(?)任务。

我已经创建了SCNText和后续的SCNNode,但是当我将它添加到rootNode时,文本似乎总是被添加到我的头上并从相机向右添加(这告诉我这是全局原点)

即使我使用与立方体相同的位置值,SCNText节点仍然位于我头顶的同一位置。

道歉,如果这是一个基本问题,我以前从未在SceneKit中工作过。

1 个答案:

答案 0 :(得分:15)

SCNGeometry的坐标中心是其中心点。但是当你创建SCNText时,中心点位于左下角的某个位置:

Center point for a box

Center point for text

您需要先将文字居中。这可以通过检查包含文本的节点的边界框并设置枢轴变换来将文本中心更改为其实际中心来完成:

func center(node: SCNNode) {
    let (min, max) = node.boundingBox

    let dx = min.x + 0.5 * (max.x - min.x)
    let dy = min.y + 0.5 * (max.y - min.y)
    let dz = min.z + 0.5 * (max.z - min.z)
    node.pivot = SCNMatrix4MakeTranslation(dx, dy, dz)
}

编辑:

另请注意this answer解释了一些额外的陷阱: 16磅字体大小的文字是16个SceneKit单位高。但在ARKit 1中,SceneKit单位= 1米!