5.2几何元素的绘制和访问

Drawable类是可绘制体的容纳者,它可以保存和渲染由顶点数据构成的几何体、位图、文字等。一个或多个Drawable可绘制对象由一个Gerde叶节点进行管理,并向用户提供了一系列操作接口。

数据的更新与显示:动态地改变几何体的顶点、法线、颜色等数据的内容是一种重要而常见的场景动画实现方法。最简单的顶点数据更新方法是预先获取setVertxArray()所用的数组数据,并对其进行更新。显示列表中的数据不能动态进行修改(setUseDisplayList)。需要调用dirtyDisplayList()来强制刷新。

慢速通道和VBO的数据渲染方式。更适合实时更新数据的VBO模型构件几何体。


5.2.3几何体的更新回调

场景节点的更新回调使用osg::NodeCallback。几何体的更新回调使用osg::Drawable::UpdateCallback。几何体的事件回调,当一个新的人机交互事件发生时,都会触发事件回调并执行用户自定义的回调函数内容。osg::Drawable::EventCallback

设置setUseVertexBufferObjects(true),以便开启VBO来渲染几何体。

仿函数  仿函数遍历几何体,使用AttributePrinter的派生类取得这个对象的所有顶点数组数据

5.3 位图的显示

5.3.1图像和图像的绘制

OSG中使用Image类来封装一个OpenGL的图像对象。

对于一般的二维图像来说,其分辨率在S、T方向为一个无符号整数值,而R方向为1;三维图像则在R方向也存在分辨率数据。

定义一个派生自Drawable的DrawPixels类,实现位图的绘制。

5.4文字的显示

矢量字体

osgText包含了二维、三维文字的绘制、排版功能,以及多字符编码的处理机制,采用在四边形面上绘制纹理的形式,将文字数据绘制到三维空间中。

二维文字的表达工具为osgText::Text类,它派生自osg::Drawable可绘制体类。三维文字的表达手段osgText::Text3D类, 。

和其他可绘制体(几何体、位图)相同,OSG中文字的渲染同样是通过drawImplementation()函数实现。
多字节字符,宽字符wchar_t的一个值就代表一个unicode字符

osg提供osgText::String来完成Unicode编码的保存和显示

 

六、设置纹理和渲染属性

渲染状态量:光照、材质、雾效、图像融合(blend)、多边形偏移(polygon offset)

6.1.2节点的渲染状态集合

osg采用包围层次的形式来构建不同层次、不同功能的场景节点,每一个节点都可以保存多种类型的渲染属性和模式;而父子节点之间则存在多种渲染状态的继承关系。我们将一个节点所赋予的多个渲染状态,包括各种属性(attrubute)和模式(mode),称为一个渲染状态集合,并使用StateSet类来表示。

osg::node setStateSet

6.2纹理与纹理属性

posted on 2017-07-25 00:08  非宁静,无以致远  阅读(1043)  评论(0编辑  收藏  举报