7

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

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

即使我使用与立方体完全相同的位置值,SCNText 节点仍会放置在我头顶的同一位置。

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

4

1 回答 1

15

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

盒子的中心点

文本的中心点

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

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)
}

编辑:

还要注意这个解释了一些额外陷阱的答案: 16 pts 字体大小的文本是 16 个 SceneKit 单位高。但在 ARKit 1 SceneKit 中,单位 = 1 米!

于 2017-06-29T15:25:22.227 回答