0

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

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

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

这是由我发现的多种不同解决方案构建的,并且我已经以多种不同的方式进行了尝试。但是,没有一个工作。

在这里,我将 1 个视图添加为 childNode,然后将另外 3 个 childNodes 添加到该孩子。

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那无处可寻。(注意,主要、顶部和底部节点是带有帽子和鞋子的黑线)

在此处输入图像描述

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

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

4

1 回答 1

3

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

但我要回答而不是投票关闭作为重复项,因为有一个或两个额外的皱纹值得一提。就在这儿:

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

首先,将 ascale和 setting 设置pivot为缩放变换具有相同的效果 — 都缩放节点的内容,因此您有效地应用了一个缩放因子,即两个变换的串联。(此外,在这些调用中,node.transform是身份,所以第一行相当于SCNMatrix4MakeScale具有相同的因素。)

其次,正如这个很好的答案中所解释的,该pivot属性将您提供的变换的逆应用于节点的内容。您的变换是缩小比例,因此应用的变换与此相反:比例增加。

(关于逆变换部分的文档pivot相当不清楚。也许如果你告诉苹果他们会修复那个文档。)

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

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

于 2018-04-26T07:40:59.060 回答