Scenekit - вычислить радиус проецируемой сферы в пикселях экрана для позиционирования метки всегда ниже узла
Как рассчитать радиус проецируемой сферы в пикселях экрана, чтобы разместить метку под моим SCNNode? В настоящее время я размещаю метку в центре узла. Моя SCNCamera имеет usesOrthographicProjection = false, потому что пользователь может перемещать камеру в пространстве, и дальнейшие объекты должны казаться меньше.
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
if let pointOfView = self.generalSceneView.pointOfView,
self.generalSceneView.isNode( celestialBody.presentation, insideFrustumOf: pointOfView) {
let centerCooordinates = self.generalSceneView.projectPoint(celestialBody.worldPosition)
DispatchQueue.main.async {
celestialBody.label.center = CGPoint(x: CGFloat(centerCooordinates.x), y: CGFloat(centerCooordinates.y))
celestialBody.label.isHidden = false
}
}
else {
DispatchQueue.main.async {
celestialBody.label.isHidden = true
}
}
}
Я попытался проецировать углы ограничивающей коробки на вид, но если я поверну камеру и посмотрю, например, сверху, текст перемещается вверх к центру. После этого я попытался проецировать другую точку с радиусом расстояния и вычислил разницу в пикселях. Но опять же, если я меняю положение камеры, расстояние, конечно, тоже меняется.
Я ищу помощь, чтобы вычислить радиус сферы в пикселях экрана. Я думаю, что это как-то возможно со свойством проекции камер. Что-то вроде этого поста: Радиус проецируемой сферы в пространстве экрана Но, к сожалению, я не понимаю, как это сделать со свойствами SCNCamera. Любая помощь приветствуется!