osg 默认数据是被cull到,才会加载的,如果需要在程序启动时就加载,但启动后并不一定需要看到该模型,这种需求,怎么实现?
查了大量资料,还是国外的OpenSceneGraph论坛比较强大,有人问到,国内论坛已经死掉了,不再维护。大致的解决方法,就是使用osgUtil::IncrementalCompileOperation,来预编译资源。
大体步骤:
1. 从Viewer获取 osgUtil::IncrementalCompileOperation的指针:
osgUtil::IncrementalCompileOperation* pIcompOperation = viewer.getIncrementalCompileOperation();
2. 创建 创建compileSet:
osg::ref_ptr<osgUtil::IncrementalCompileOperation::CompileSet> compileSet = osgUtil::IncrementalCompileOperation::CompileSet(NODE,true);
3. 从CompileCompletedCallback派生新类,然后重写Completed函数,在内部隐藏节点:
4. 将 派生类 绑定到 compileSet。
compileSet->compileSet->_compileCompletedCallback = newCompileCompletedCallback;
5. 设置 IncrementalCompileOperation 过期策略
pIcompOperation->setCompileAllTillFrameNumber(50);