osg.BuildShapeGeometryVisitor
类是 OpenSceneGraph 中的一个访问者(Visitor),用来实现从几何图形数据中构建几何对象的功能。
这个访问者类是建模工具中非常重要的一部分,可以方便的从模型数据中提取几何信息并生成对应的渲染对象。
osg.BuildShapeGeometryVisitor
是基类 osg.NodeVisitor
的子类,在创建对象时可以通过默认的构造函数初始化:
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("model.ive");
osg::ref_ptr<osg::BuildShapeGeometryVisitor> visitor = new osg::BuildShapeGeometryVisitor();
model->accept(*visitor);
上述代码创建了一个新的 osg.Node
对象,并将它读入到 model
标识符中。然后,我们创建了一个新的 osg.BuildShapeGeometryVisitor
对象,并遍历 model
对象的所有子节点,并调用每个子节点的 accept
函数来让 visitor
访问它们。
当访问者对象访问到包含几何图形的子节点时,它会将子节点中的几何信息提取出来,并将其构建成一个或多个 osg::Geometry
对象,并将它们添加到一个 osg::Geode
对象中。
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("model.ive");
osg::ref_ptr<osg::BuildShapeGeometryVisitor> visitor = new osg::BuildShapeGeometryVisitor();
model->accept(*visitor);
osg::ref_ptr<osg::Group> group = visitor->getNode();
如果需要使用上述生成的 osg::Group
对象,可以将它通过引用(Reference)的方式传递到其他地方。
osg.BuildShapeGeometryVisitor
类还可以根据几何数据自动生成对应的法线及纹理坐标。在生成几何图形时设置相应选项即可。
visitor->setNormalPerVertex(true); // 为每个顶点计算法线
visitor->setGenerateTextureCoords(true); // 为每个顶点生成纹理坐标
osg.BuildShapeGeometryVisitor
类也支持一些其他的属性设置,例如用于删除重复顶点的阈值,为法线指定保护角度(在该角度以下,法线将被赋值为平均法线),还可以为填充区域指定颜色等。