我一直在寻找使用 arkit 显示一些文本。为了实现这一点,我创建了一个SCNText
对象,给它一个字体大小并缩小它。这似乎是调节其大小的推荐方法。
现在对于定位,我需要计算SCNText
对象的高度。为此,有boundingBox
一个返回(min, max)
元组的方法。
问题是边界框参数仍然在没有缩放的情况下描述原始边界框。
我在这里错过了什么吗?我唯一的目标是获得一个大小合适的 3d 文本并知道它的高度。
谢谢!
private func displayBarValue(barNode: ARBarChartBar) {
let barValueText = SCNText(string: String(barNode.value), extrusionDepth: 0.0)
let fontSize = CGFloat(1)
barValueText.font = UIFont (name: "Arial", size: fontSize)
barValueText.firstMaterial!.isDoubleSided = true
barValueText.firstMaterial!.diffuse.contents = UIColor.white
let barValueLabel = SCNNode()
barValueLabel.geometry = barValueText
let scale = Float(0.05/fontSize)
barValueLabel.scale = SCNVector3(scale, scale, scale)
center(node: barValueLabel)
let min = barValueLabel.boundingBox.min
let max = barValueLabel.boundingBox.max
let barValueLabelHeight = max.y - min.y
let spaceBetweenBarAndText = Float(0.012)
barValueLabel.position = SCNVector3(x: 0, y: barNode.barHeight/2+barValueLabelHeight/2+spaceBetweenBarAndText, z: 0)
barNode.addChildNode(barValueLabel)
}
}
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)
}