除了相机xFov,yFov,zNear和zFar之外,还有一种方法可以让SceneKit让一个节点(及其后代)剪切到边界,即指定一个任意3D边界框,其中任何一个落在它之外的节点将不会被渲染?
我的用例如下:
我有一个带有清晰颜色背景的SceneView,它显示在一个单独的地图视图上。
我只想在我的3D模型中显示名义上超过'的节点。地面(即地图上方)。当地图是平的时,我可以通过在SceneKit摄像机上设置zFar并将摄像机直接放在正Z轴上来轻松完成。
但是,如果地图倾斜,那么我需要调整我的场景摄像头以匹配地图倾斜。然而,在那时,相机z轴不再与场景内容正交,并且zFar将显示'模型中名义上位于地图下方的节点。
(如果地图内容是SceneKit节点层次结构的一部分,这将很容易 - 只需定义一个楼层并在地板上渲染地图。但地图显示在位于SceneKit视图下方的单独视图中。)< / p>
因此,我希望定义一个平面或边界框,在该平面或边界框外面不会渲染SceneKit节点,但可以独立于相机平截头体来控制它。
(至少那是我认为我需要的东西 - 或许还有另一种方式......)
更新
我发现我可以为SCNView委托实现渲染器(aRenderer:SCNSceneRenderer,didSimulatePhysicsAtTime time:NSTimeInterval),并遍历我的场景节点并测试世界位置,隐藏或显示所需。然而,这感觉有点昂贵和低效 - 我想知道是否有更好的方法?