Это нормально, что, если узел масштабируется, ограниченный прямоугольник scntext не слишком?
Я искал, чтобы отобразить текст с помощью 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)
}
1 ответ
Я что-то здесь упускаю?
Похоже, это так. Согласно документам, ограничивающий прямоугольник определяется в терминах локальной системы координат, но такие преобразования, как масштабирование, обычно выполняются путем настройки способа отображения локальной системы координат на систему координат контейнера. От SCNBoundingVolume
документы:
Ограничивающий объем узла с прикрепленной геометрией - это ограничивающий объем геометрии, выраженный в локальном пространстве узла.
Короче говоря, вы хотите знать, насколько большой текст по сравнению с другими объектами сцены, но вы получаете размер в локальной системе координат текстового узла. Если вы хотите узнать размер в другом координатном пространстве, вам нужно применить преобразование узла к ограничивающей рамке.