osgUtil.SceneGraphBuilder
提供了一种从场景图节点构建场景的方式,该节点按指定规则生成场景图。
osgUtil::SceneGraphBuilder::SceneGraphBuilder(osgUtil::SceneGraphBuilder::Settings* settings=nullptr);
osgUtil::SceneGraphBuilder::SceneGraphBuilder
构造函数有一个可选参数settings
,它是用来指定构建场景图的设置。如果不指定设置,将使用默认设置。
void osgUtil::SceneGraphBuilder::setBuilder(osgUtil::SceneGraphBuilder::Builder* builder);
osgUtil::SceneGraphBuilder::setBuilder
方法用于设置osgUtil::SceneGraphBuilder::Builder
对象,以更改场景图生成的方式。默认情况下,使用StandardBuilder
。
osgUtil::SceneGraphBuilder::Builder* osgUtil::SceneGraphBuilder::getBuilder() const;
osgUtil::SceneGraphBuilder::getBuilder
方法用于获取当前使用的osgUtil::SceneGraphBuilder::Builder
对象。
void osgUtil::SceneGraphBuilder::setSettings(osgUtil::SceneGraphBuilder::Settings* settings);
osgUtil::SceneGraphBuilder::setSettings
方法用于更改场景图构建的设置。
osgUtil::SceneGraphBuilder::Settings* osgUtil::SceneGraphBuilder::getSettings() const;
osgUtil::SceneGraphBuilder::getSettings
方法用于获取当前使用的osgUtil::SceneGraphBuilder::Settings
对象。
osg::Node* osgUtil::SceneGraphBuilder::build(const std::string& filename);
osgUtil::SceneGraphBuilder::build
方法从提供的文件filename
中加载场景图文件,并使用已设置的设置和生成器构建场景图。
osg::Node* osgUtil::SceneGraphBuilder::build(osgDB::InputStream& is);
osgUtil::SceneGraphBuilder::build
方法从提供的流is
中加载场景图,并使用已设置的设置和生成器构建场景图。
osg::Node* osgUtil::SceneGraphBuilder::build(osgDB::XmlNode* xmlNode);
osgUtil::SceneGraphBuilder::build
方法从提供的XML节点xmlNode
中读取场景图,并使用已设置的设置和生成器构建场景图。
osg::Node* osgUtil::SceneGraphBuilder::buildFromObject(const osg::Object* object);
osgUtil::SceneGraphBuilder::buildFromObject
方法从提供的object
对象中构建场景图,并使用已设置的设置和生成器构建场景图。
Settings
类包含了osgUtil::SceneGraphBuilder
所需的所有设置。默认情况下,所有选项都设置为其默认值。
class Settings : public osg::Object
{
public:
Settings();
META_Object(osgUtil, SceneGraphBuilder::Settings);
osg::CopyOp::Direction getCopyHeuristic() const { return _copyHeuristic; }
void setCopyHeuristic(osg::CopyOp::Direction heuristic) { _copyHeuristic = heuristic; }
osg::CopyOp::Options* getCopyOptions() const { return _copyOptions.get(); }
void setCopyOptions(osg::CopyOp::Options* options) { _copyOptions = options; }
bool getCloneModelViewMatrix() const { return _cloneModelViewMatrix; }
void setCloneModelViewMatrix(bool clone) { _cloneModelViewMatrix = clone; }
bool getCloneStateSets() const { return _cloneStateSets; }
void setCloneStateSets(bool clone) { _cloneStateSets = clone; }
bool getCloneDrawables() const { return _cloneDrawables; }
void setCloneDrawables(bool clone) { _cloneDrawables = clone; }
bool getCreateDrawablesWithoutGeometry() const { return _createDrawablesWithoutGeometry; }
void setCreateDrawablesWithoutGeometry(bool create) { _createDrawablesWithoutGeometry = create; }
osg::Matrix& getMatrix() { return _matrix; }
const osg::Matrix& getMatrix() const { return _matrix; }
void setMatrix(const osg::Matrix& matrix) { _matrix = matrix; }
osg::RenderInfo* getRenderInfo() const { return _renderInfo; }
void setRenderInfo(osg::RenderInfo* info) { _renderInfo = info; }
osg::Object* getUserData() { return _userData.get(); }
const osg::Object* getUserData() const { return _userData.get(); }
void setUserData(osg::Object* userData) { _userData = userData; }
private:
osg::CopyOp::Direction _copyHeuristic = osg::CopyOp::SHALLOW_COPY;
osg::ref_ptr<osg::CopyOp::Options> _copyOptions = new osg::CopyOp::Options;
bool _cloneModelViewMatrix = true;
bool _cloneStateSets = true;
bool _cloneDrawables = true;
bool _createDrawablesWithoutGeometry = false;
osg::Matrix _matrix;
osg::ref_ptr<osg::RenderInfo> _renderInfo;
osg::ref_ptr<osg::Object> _userData;
};
osgUtil::SceneGraphBuilder::Builder
类是用于构建场景图的基类,可以扩展此类以根据您的需求生成场景图节点。
class Builder : public osg::Referenced
{
public:
virtual osg::Node* buildNode(const osg::Node& source, const osgUtil::SceneGraphBuilder::Settings& settings) = 0;
};
Builder
类有一个纯虚函数buildNode
,该方法以源节点和设置作为参数,返回新的节点。实现此方法以自定义构建器的行为。默认情况下,使用StandardBuilder
。
StandardBuilder
是osgUtil::SceneGraphBuilder::Builder
的一个实现,它执行标准场景构建。
class StandardBuilder : public osgUtil::SceneGraphBuilder::Builder
{
public:
virtual osg::Node* buildNode(const osg::Node& source, const osgUtil::SceneGraphBuilder::Settings& settings) override;
};