osg例子--osganalysis(预编译渲染)

经过资料查询,好像是说在用于预编译,在运行时就把模型渲染到场景,居然用途未知,记录一下接口说明

    osg::ref_ptr<osgUtil::IncrementalCompileOperation> incrementalCompile = new osgUtil::IncrementalCompileOperation;
	//设置增量编译操作
	//用于管理OpenGL对象编译和子图的合并,以避免在一帧中有太多新对象而使帧的渲染过载。
    viewer.setIncrementalCompileOperation(incrementalCompile.get());

    if (arguments.read("--force") || arguments.read("-f"))
    {
		//在每次纹理编译后,分配一个几何体和相关的StateSet,以试图强制OpenGL驱动器将纹理对象下载到OpenGL显卡。
        incrementalCompile->assignForceTextureDownloadGeometry();
    }

    if (arguments.read("-a"))
    {
		//设置每帧编译和删除OpenGL对象所需的最小时间(以秒为单位)。默认值为0.001(1毫秒)。使用方法参见setTargetFrameRate中的注释。
        incrementalCompile->setMinimumTimeAvailableForGLCompileAndDeletePerFrame(1);
		//ConservativeTimeRatio控制每一帧中有多少测量的空闲时间用于刷新已删除的OpenGL对象和编译新的OpenGL对象。
		//缺省值为0.5,有效范围为0.1 ~1.0。接近1.0的比值会导致页面数据库编译和合并更快,但会增加掉帧的几率。
		//接近0.1的比率将导致页面数据库的编译和合并更紧密,但减少了丢帧的机会。
        incrementalCompile->setConservativeTimeRatio(1);
		//设置页面每帧尝试编译的OpenGL对象的最大数量。注意,值越小,帧丢失的几率就越低,但是数据库被页入的速率也越低。缺省值为8。
        incrementalCompile->setMaximumNumOfObjectsToCompilePerFrame(100);
    }
    // 创建compileSet:

		osg::ref_ptr<:incrementalcompileoperation::compileset> compileSet = osgUtil::IncrementalCompileOperation::CompileSet(NODE,true);
		
		//从CompileCompletedCallback派生新类,然后重写Completed函数,在内部隐藏节点:
		
		//将 派生类 绑定到 compileSet。
		
		compileSet->compileSet->_compileCompletedCallback = newCompileCompletedCallback;
		
		//设置 IncrementalCompileOperation 过期策略
		
		pIcompOperation->setCompileAllTillFrameNumber(50);

再往下就是使鼠标聚焦到osg的绘制窗口上这个一个功能。使用增量编译osgUtil::IncrementalCompileOperation,避免加载大模型时造成的帧率下降。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值