[osg]osg绘制动态改变顶点的几何体

最简单的顶点数据更新方法是预先获取setVertexArray()所用的数组数据,并对其进行更新。但是对于开启显示列表支持的几何体(这是默认的情况)来说,有一个问题需要特别需要引起注意,即显示列表中的数据不能动态进行修改。任何对于顶点数据的修改都需要销毁和重新建立相应的显示列表。换句话说,由于Drawable::draw()函数在仿真循环中默认使用glcallList()直接调用已编译的显示列表,因而用于实现顶点绑定功能的drawImplementation()函数只有在构建显示列表时被执行一次,以后将不再被调用,除非强制重新对其进行调用。

        因此,当我们手动更新了几何体的顶点数据,并且所使用的渲染方式为显示列表(setUseDisplayList())时,需要调用dirtyDisplayList()来强制刷新与其关联的显示列表。

      当需要更改的数据采用动画的形式来表现的时候,这意味着每一帧都需要执行一次显示列表的重建工作——这无疑是难以让人接受的。此时我们多半会选择慢速通道或者VBO的数据渲染方式,后者显然更加高效和适宜,而对于配置较低的系统而言,使用glBegin/glEnd序列来进行动态对象的表达也是一种不错的方式。

 

    使用VBO来更新几何对象后,需要使用Vec3Array::dirty()来将修改结果通知给VBO对象

 

关于DataVariance

场景数据动态更新的核心就是设置数据变度属性DataVariance,它决定了OSG在多线程渲染的过程中的执行策略:只有所有DYNAMIC属性的对象被渲染完毕之后,OSG才会开始执行下一帧的用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值