在陈述我的问题之前,我想澄清一下我的问题有多个答案,不幸的是,他们都没有解决我的问题。请不要将此标记为副本。
现在这是我创建文本节点的代码
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
无处可寻。 (请注意,它是帽子和鞋子的黑线,主要,顶部和底部节点)
根据其他位置属性设置,文本应完全显示在黑线的中间垂直,并略微向右水平。
我所缺少的是我在其他答案中找不到的东西。请提出建议我应该如何解决这个问题。
答案 0 :(得分:2)
嗯,很可能你的文字没有显示,因为与你确定不重复的其他问题相同的原因:它太大了。
但是我正在回答而不是投票结束重复,因为有一个额外的皱纹或两个值得呼唤。就在这里:
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
。)
其次,如this great answer中所述,pivot
属性将您提供的转换的逆应用于节点的内容。您的变换是缩放的缩小,因此应用的变换与此相反:缩放比例增加。
(documentation for pivot
在逆转换部分相当不清楚。也许如果你tell Apple about it他们将修复该文档。)
把它放在一起:你将32“点”文本节点缩小到1 / 10x,然后高达72x。这与将其缩放到7.2x相同,或者只是使用230“点”字体开始。
而noted elsewhere,字体的“点”大小实际上是SceneKit + ARKit中的米,所以你可能有摩天大楼大小的字母漂浮在你的右上方(如果它们不是隐形的,因为它们'超出剪辑深度)。希望你带上攀岩装备......