该类继承自osgUtil::StateGraph::SortFunctor,是OpenSceneGraph中用于深度排序算法的函数对象。它用于对场景中的几何体进行排序以便于渲染时正确绘制,避免Z-fighting等问题。
LessDepthSortFunctor()
bool operator ()(const osg::Drawable* lhs, const osg::Drawable* rhs) const
该方法是本类实现深度排序算法的核心方法,它会比较lhs和rhs的深度信息,返回lhs是否在rhs前面绘制。具体实现过程如下:
void sortDrawables(osg::Node& node) const
该方法调用上述的比较算法,并使用节点Visitor访问场景图中的所有Drawables。根据前面的深度排序算法和Visitor遍历顺序,对访问到的每一个Drawable与它们的父节点正在排序的Drawables进行逐一比较和排序。
void sortDrawables(osg::Node& node, osgUtil::RenderBin* renderBin) const
该方法的作用与sortDrawables()方法相似,但是它只排序renderBin中的Drawables。
// 创建深度排序函数对象
osgUtil::LessDepthSortFunctor depthSort;
// 排序场景中所有Drawables
depthSort.sortDrawables(scene->getSceneData());
// 排序场景中某个renderBin中的Drawables
depthSort.sortDrawables(scene->getSceneData(), scene->getOrCreateStateSet()->getOrCreateRenderBin("DepthSorted"));