SCNText 不会显示

SCNText won't show

在说明我的问题是什么之前,我想澄清一下,我的问题有多个答案,不幸的是,none 解决了我的问题。请不要将其标记为重复。

现在这是我必须创建文本节点的代码

let textNode: SCNNode = {
            let text = SCNText.init(string: "250.9cm", extrusionDepth: 0.01)
            text.font = UIFont(name: "System", size: 32)
            text.flatness = 0.2
            let node = SCNNode.init(geometry:  text)
            node.pivot = SCNMatrix4Scale(node.transform, 1/72, 1/72, 1/72)
            node.scale = SCNVector3(0.1, 0.1, 0.1)
            node.geometry?.materials.first?.diffuse.contents = UIColor.red
            return node
        }()

这是由我发现的多种不同解决方案构建而成的,我已经以多种不同的方式进行了尝试。但是,none 正在工作。

这里我添加 1 个视图作为子节点,然后为那个子节点添加另外 3 个子节点。

self.addChildNode(mainNode)

        topNode.position = SCNVector3(mainNode.getMidX(), mainNode.boundingBox.max.y, mainNode.getMidZ())
        bottomNode.position = SCNVector3(mainNode.getMidX(), mainNode.boundingBox.min.y, mainNode.getMidZ())
        textNode.position = SCNVector3(mainNode.getMidX()+0.005, mainNode.getMidY(), mainNode.getMidZ())

        mainNode.addChildNode(topNode)
        mainNode.addChildNode(bottomNode)
        mainNode.addChildNode(textNode)

正如您在下图中看到的,所有内容都正确且准确地显示在我期望的位置。除了无处可寻的 textNode。 (注意是帽子和鞋子的黑线是主要的,顶部和底部节点)

根据设置的其他位置属性,文本应该完美地出现在垂直方向的黑线中间,水平方向稍微偏右。

我缺少的是我在其他答案中找不到的东西。请提出我应该如何处理的建议。

好吧,很可能您的文本没有显示,原因与您确定不是重复的其他问题相同:它太大了。

但我是在回答而不是投票关闭重复,因为还有一两个额外的问题值得指出。就在这里:

node.pivot = SCNMatrix4Scale(node.transform, 1/72, 1/72, 1/72)
node.scale = SCNVector3(0.1, 0.1, 0.1)

首先,将 scale 设置为缩放变换并设置 pivot 具有相同的效果 — 都缩放节点的内容,因此您有效地应用了一个缩放因子,它是两个变换。 (此外,对于这些调用,node.transform 是恒等式,因此第一行等同于具有相同因子的 SCNMatrix4MakeScale。)

其次,如 中所述,pivot 属性 将您提供的变换的 反向 应用于节点内容。您的变换是缩小比例,因此应用的变换是相反的:增加比例。

documentation for pivot is rather unclear on the inverse transformation part. Maybe if you tell Apple about it 他们会修复该文档。)

放在一起:您正在将一个 32“点”的文本节点缩小到 1/10 倍,然后再放大到 72 倍。这与将其缩放到 7.2 倍或仅使用 230“点”字体开始时相同。

一样,字体的“点”大小在 SceneKit+ARKit 中实际上是米,所以你可能有摩天大楼大小的字母漂浮在你右上方的某个地方(如果它们不是不可见的,因为它们超出了剪辑深度)。希望你带上登山装备...