如何获取被剖切平面隐藏的节点?
获取被剖切平面隐藏节点的实现方案
我应当如何获取被剖切平面隐藏的节点,例如是否可以通过
VisibilityManager.getHiddenNodes()方法实现该需求?
VisibilityManager.getHiddenNodes() 不可以实现这个需求。该方法仅返回通过手动隐藏操作、可见性筛选规则主动设置为隐藏的节点,剖切平面属于空间裁剪类的可见性控制,通过这种方式隐藏的节点不会被纳入该方法的返回结果中。
正确的实现逻辑如下:
- 第一步:获取当前场景中所有生效的剖切平面对象,提取每个平面的方程参数(通用平面表达式为
ax + by + cz + d = 0) - 第二步:遍历你需要校验的所有场景节点,获取每个节点的三维包围盒(Bounding Box)的所有顶点坐标
- 第三步:对每个节点的包围盒顶点做裁剪判定:将顶点坐标代入单个剖切平面的方程,若计算结果小于0,说明该顶点处于该剖切平面的隐藏侧
- 第四步:如果某一节点的所有包围盒顶点都处于任意一个剖切平面的隐藏侧,即可判定该节点是被剖切平面完全隐藏的节点;如果只需判定是否被部分裁剪,只要存在至少一个顶点处于隐藏侧即可
目前主流的三维可视化引擎都没有提供直接获取被剖切平面隐藏节点的原生API,都需要按上述逻辑自行封装判断方法。如果是精度要求不高的场景,也可以直接用节点的中心点坐标代替所有包围盒顶点做判定,能大幅提升计算效率。
内容的提问来源于stack exchange,提问作者shogo
相关产品推荐
相关产品推荐

