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 中实际上是米,所以你可能有摩天大楼大小的字母漂浮在你右上方的某个地方(如果它们不是不可见的,因为它们超出了剪辑深度)。希望你带上登山装备...
在说明我的问题是什么之前,我想澄清一下,我的问题有多个答案,不幸的是,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“点”字体开始时相同。
和