博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OSG中的DataVariance
阅读量:5106 次
发布时间:2019-06-13

本文共 990 字,大约阅读时间需要 3 分钟。

场景数据动态更新的核心就是设置数据变度属性DataVariance,它决定了OSG在多线程渲染的过程中的执行策略:只有所有DYNAMIC属性的对象被渲染完毕之后,OSG才会开始执行下一帧的用户更新操作;这样有效地可以避免数据的过快更新造成当前的渲染动作出错,以致系统崩溃。

所有派生自osg::Object的对象都可以设置数据变度的属性,通常设置的时机在新建对象之时,例如:
osg::ref_ptr<osg::Group>
node = new
osg::Group;
node->setDataVariance(osg::Object::DYNAMIC);
...
这就意味着这个组节点可能在渲染过程中发生变动,可能变动的内容包括:成员属性的改变,新增/替换/删除子节点,或者使用事件/更新/裁减回调实现的自定义变动。
数据变度的设置对于渲染状态和纹理的动态更新同样有重要的意义。而对于osg::Drawable对象,设置为动态更新意味着它可能在渲染过程中发生顶点属性或者图元的变化;这其中尤为要提及osgText::Text,文字属性的变化必须预先设置动态的数据变度属性,否则可能造成系统运行过程中崩溃:
osg::ref_ptr<osgText::Text>
text = new
osgText::Text;
text->setDataVariance(osg::Object::DYNAMIC);
...
// 渲染过程中可以动态改变文字的位置和内容等属性
{
    text->setPosition( ... );
    text->setText( ... );
}
数据变度不能被自动继承。它事实上只有STATIC和DYNAMIC两个可选值,而UNSPECIFIED意味着系统将自动根据初始化时的情况给对象设置数据变度的属性。默认情况下,任何新建对象都是UNSPECIFIED的,如果系统在第一次执行渲染前发现它附带有更新/事件/裁减回调对象的话,则会自动给它设置setDataVariance(osg::Object::DYNAMIC);因此,我们可以说过多的更新回调会造成系统的渲染效率在一定程度上降低,不过即使在非常极端的情况下,也不会低于单线程模式的效率。

转载于:https://www.cnblogs.com/wanfu/p/3912896.html

你可能感兴趣的文章
[算法题] Remove Duplicates from Sorted Array
查看>>
vuex状态管理
查看>>
WordPress Feedweb插件跨站脚本漏洞
查看>>
DataTable 导到Excel
查看>>
mkdir() Permission denied 报错问题
查看>>
PHP 多线程采集
查看>>
C# 采用HttpWebRequest 自定义头信息 上传文件
查看>>
在服务器上用Fiddler抓取HTTPS流量
查看>>
字典和Model的互转
查看>>
Dot Product
查看>>
1200
查看>>
京东笔试编程题:采购单+保卫方案
查看>>
PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。
查看>>
[转]Linux进程间通信——使用信号
查看>>
jenkins 安装配置
查看>>
为DataGrid添加自定义DataGridColumn类的例子
查看>>
j-1修改元素样式
查看>>
D-1修改元素样式
查看>>
SIFT 尺度不变特征变换算法
查看>>
《Entity Framework 6 Recipes》中文翻译系列 (17) -----第三章 查询之分页、过滤和使用DateTime中的日期部分分组...
查看>>