0

如何计算以屏幕像素为单位的投影球体的半径以将标签定位在我的 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
        }
    }
}

在此处输入图像描述

在此处输入图像描述

我试图将boundingBox的角投影到视图中,但是如果我旋转相机并从上方看例如,文本会向上移动到中心。之后,我尝试用半径距离投影另一个点并计算像素差。但同样,如果我改变相机位置,距离当然也会改变。

我正在寻求帮助来计算以屏幕像素为单位的球体半径。我认为相机的 projectionTransform 属性在某种程度上是可能的。这篇文章中的内容:屏幕空间中投影球体的半径但不幸的是,我不明白如何使用 SCNCamera 属性来做到这一点。任何帮助表示赞赏!

4

0 回答 0