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. Любая помощь приветствуется!

0 ответов

Другие вопросы по тегам