osgUtil.GeometryCollector
是OpenSceneGraph的一个工具类,用于收集场景图中所有的几何图元(geode)。
osgUtil.GeometryCollector
可以执行以下功能:
osgUtil.GeometryCollector
类的使用方法如下:
osgUtil::GeometryCollector gc;
if (visibleOnly)
gc.setCollectVisible(true);
if (geodeType)
gc.setGeodeTypeMask(geodeType);
node->accept(gc);
osg::Geometry* geometry = gc.createIndexedGeometry();
在上述代码中,我们首先创建了一个 osgUtil.GeometryCollector
的实例 gc
,然后通过设置 setCollectVisible
方法和 setGeodeTypeMask
方法指定了要收集的几何图元类型和是否只收集可见的几何图元。
接着,我们通过调用场景图中的根节点 node
的 accept
方法来遍历整个场景图,并让 gc
对象收集场景图中的几何图元。
最后,我们通过调用 gc.createIndexedGeometry
方法创建了一个拥有所有收集到的几何图元的 osg::Geometry
对象,可以将其添加到场景图中显示。
osgUtil.GeometryCollector
类的详细 API 文档如下:
GeodeTypeMask getGeodeTypeMask() const
获取要收集的几何图元类型掩码。
void setGeodeTypeMask(GeodeTypeMask mask)
设置要收集的几何图元类型掩码。
mask
:几何图元类型掩码。默认值为 Geode::DrawableListType
。bool getCollectVisible() const
获取是否只收集可见的几何图元的标志。
void setCollectVisible(bool flag)
设置是否只收集可见的几何图元的标志。
flag
:可见标志。如果为 true
,则只收集可见的几何图元。默认为 false
。osg::Geometry createIndexedGeometry() const*
创建拥有所有收集到的几何图元的 osg::Geometry
对象。
struct CollectResult : public osg::Referenced
{
std::vector<osg::ref_ptr<osg::Drawable>> drawables;
std::vector<osg::Matrix> matrices;
};
用于存储收集结果的结构体。
drawables
:所有收集到的几何图元。matrices
:所有几何图元相对于根节点的变换矩阵。enum GeodeType {GEOMETRY, IMAGE, TRANSFORM};
typedef unsigned int GeodeTypeMask;
GeodeType
枚举表示几何图元类型,包括几何图元、图像几何图元和变换几何图元。
GeodeTypeMask
枚举表示几何图元类型掩码,可以用于指定要收集的几何图元类型。