• 场景数据的动态更新setDataVariance(osg::Object::DYNAMIC) (转)


    场景数据的动态更新

    动态更新的核心就是设置数据变度属性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);
    ...

    // 渲染过程中可以动态改变文字的位置和内容等属性
    {

  • 相关阅读:
    java内存泄露
    hbase java api
    配置CRT远程登录
    kafka分区消费模型
    JAVA内存区域
    JVM分代和垃圾回收
    spring中bean的作用域
    分布式RPC
    session共享
    ZooKeeper实现分布式session
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/2818699.html
Copyright © 2020-2023  润新知