如何计算以屏幕像素为单位的投影球体的半径以将标签定位在我的 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 属性来做到这一点。任何帮助表示赞赏!