OSG 目前所支持的场景筛选方式

OSG 目前所支持的场景筛选方式(即CullSettings::CullingModeValues 枚举量)包括:
NO_CULLING:也就是不进行场景筛选,如果您希望自己实现场景筛选的功能,或者
由于某种特殊原因不希望执行筛选工作,可以选择这一项。
NEAR_PLANE_CULLING:近平面筛选,将超出近平面范围以外的对象剔除。
FAR_PLANE_CULLING:远平面筛选,将超出远平面范围以外的对象剔除。
VIEW_FRUSTUM_CULLING:视锥体筛选,它保证场景中只有视锥体范围内(包括视
锥,近平面和远平面)的一小部分节点和Drawable 对象是可见的,因而加速场景的绘制速
度。
VIEW_FRUSTUM_SIDES_CULLING:视锥体侧面筛选,它不执行近平面/远平面的筛
选工作,除此之外与VIEW_FRUSTUM_CULLING 没有区别。
SMALL_FEATURE_CULLING:细节筛选,场景中某些物体对于观察者而言可能是十
分微小的,足以忽略不计,此时可以用细节筛选特性将它们剔除。判断对象是否足够微细的
阈值由CullSettings::setSmallFeatureCullingPixelSize 设定。注意这种筛选可能会剔除一些必
要的信息(比如用户在屏幕上绘制了一些点,却发现它们统统被吞噬掉了),此时可以强制
设置几何体对象的包围盒大小(Drawable::setInitialBound),或者关闭细节筛选特性。
SHADOW_OCCLUSION_CULLING:遮挡筛选,虽然需要用户手动去设置诸多的几何
信息,但是OSG 的确出色地实现并继续完善本影遮挡筛选(即完全遮挡)的算法。在
osgoccluder 例子中,您可以仔细揣摩其中有关ConvexPlanarOccluder 和OccluderNode 的用

法。

CLUSTER_CULLING:聚集筛选,这是一种类似于背面筛选的场景筛选方法,但是它
可以将多个对象组合起来并进行统一的背面筛选,OSG 中,目前可以使用筛选回调
ClusterCullingCallback 来实现节点的聚集筛选(对节点使用Node::setCullCallback),这在地
球地理信息的裁减时尤为适用。
DEFAULT_CULLING:缺省方式下会自动打开视锥体侧面筛选,细节筛选,遮挡筛选
和聚集筛选的选项,不过后两者还需要编写额外的代码以实现功能。
ENABLE_ALL_CULLING:开启全部筛选方式,包括视锥体筛选,细节筛选,遮挡筛
选和聚集筛选。
设置一种或多种筛选方式可以使用 CullSettings::setCullingMode 函数(采用“或”运算
来指定多种筛选方式),如果希望暂时屏蔽某一种筛选方式,可以如下编写代码:
camera->setCullingMode(camera->getCullingMode() &
~osg::CullSettings::SMALL_FEATURE_CULLING);
有关各种筛选方式的详细算法,可以参考CullingSet::isCulled 函数,有关遮挡筛选和聚
集筛选的算法请单独参阅OccluderNode,ConvexPlanarOccluder 和ClusterCullingCallback 等
相关类的实现代码。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭