需要 2d 广告牌仅在节点几何图形的前面绘制
need 2d billboards to only draw when on the front of a node's geometry
我正在渲染一个球体,球体上有一些二维平面(注释)。如果注释位于距指向相机的矢量超过 90º 的点上,我希望注释不呈现……如果这有意义的话。
基本上我希望注释在引用我的球体上相机无法看到的点时消失。
我该如何完成?
为了阐明我的示例,我正在制作一个带有注释的 3d 地球仪。我不希望球体背面的注释被渲染,但我也不希望球体正面位于下半球的注释的纹理被剪裁。我能够调整渲染顺序来解决第二个问题,但第一个问题就成了问题。
更新:感谢 mnuages 我能够使用此代码解决我的问题
func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
let position = scene.rootNode.convertPosition(annotation!.position, fromNode: globeNode)
if position.z > 0 {
annotation?.hidden = false
} else {
annotation?.hidden = true
}
}
- 计算视图中球体中心的坐标 space
- 计算视图中跟踪点的坐标space
- 计算从球体中心到视图中跟踪点的向量 space
- 如果前一个向量的
z
分量为负则点被隐藏(设置节点的hidden
属性为YES
)
我正在渲染一个球体,球体上有一些二维平面(注释)。如果注释位于距指向相机的矢量超过 90º 的点上,我希望注释不呈现……如果这有意义的话。
基本上我希望注释在引用我的球体上相机无法看到的点时消失。
我该如何完成?
为了阐明我的示例,我正在制作一个带有注释的 3d 地球仪。我不希望球体背面的注释被渲染,但我也不希望球体正面位于下半球的注释的纹理被剪裁。我能够调整渲染顺序来解决第二个问题,但第一个问题就成了问题。
更新:感谢 mnuages 我能够使用此代码解决我的问题
func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
let position = scene.rootNode.convertPosition(annotation!.position, fromNode: globeNode)
if position.z > 0 {
annotation?.hidden = false
} else {
annotation?.hidden = true
}
}
- 计算视图中球体中心的坐标 space
- 计算视图中跟踪点的坐标space
- 计算从球体中心到视图中跟踪点的向量 space
- 如果前一个向量的
z
分量为负则点被隐藏(设置节点的hidden
属性为YES
)