osg.ArrayVisitor是OpenSceneGraph的一个访问器类,用于遍历和访问osg::Array类和其子类对象。它通常与osg::Geometry相结合使用,在Geometry中访问顶点数据、法线数据、颜色数据等。
osg.ArrayVisitor是一个虚类,需要通过继承并重载其成员函数来使用。它的成员函数主要包括:
apply(osg::Array&)
: 访问osg::Array对象的函数apply(osg::Vec2Array&)
: 访问osg::Vec2Array对象的函数apply(osg::Vec3Array&)
: 访问osg::Vec3Array对象的函数apply(osg::Vec4Array&)
: 访问osg::Vec4Array对象的函数apply(osg::VertexArray&)
: 访问osg::VertexArray对象的函数apply(osg::NormalArray&)
: 访问osg::NormalArray对象的函数apply(osg::ColorArray&)
: 访问osg::ColorArray对象的函数apply(osg::SecondaryColorArray&)
: 访问osg::SecondaryColorArray对象的函数apply(osg::FogCoordArray&)
: 访问osg::FogCoordArray对象的函数apply(osg::VertexAttribArrayList&)
: 访问osg::VertexAttribArrayList对象的函数apply(osg::PrimitiveSet&)
: 访问osg::PrimitiveSet对象的函数其中最重要的是apply(osg::Array&)
函数,因为它可以访问osg::Array以及所有子类对象。
一个简单的例子:
class MyArrayVisitor : public osg::ArrayVisitor
{
public:
virtual void apply(osg::Array& array)
{
std::cout << "Got an array with " << array.getNumElements()
<< " elements and " << array.getDataSize()
<< " total bytes of data" << std::endl;
}
};
osg::ref_ptr<osg::Geometry> geom = createSomeGeometry();
MyArrayVisitor visitor;
geom->accept(visitor);
这里我们定义了一个MyArrayVisitor类,并重载了apply(osg::Array&)
函数。当我们以此访问一个Geometry对象时,它会回调我们的重载函数,并输出当前处理的Array对象的元素数量和数据大小。
osg.ArrayVisitor继承链如下:
osg::Referenced
└─ osg::ArrayVisitor