• 三维渲染引擎设计与实践(五)


    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纹理与纹理属性

  • 相关阅读:
    设计模式之装饰模式
    SpringAOP 失效解决方案、Spring事务失效
    Jmeter测试出现端口占用情况
    ElasticSearch创建动态索引
    Zuul + Ribbon 脱离Eureka完成负载均衡+重试机制
    TCP的三次握手与四次挥手笔记
    Java中的阻塞队列
    Jmeter5.1——聚合报告参数分析
    SpringCloud"灰度部署"——动态刷新网关配置
    JVM学习笔记——类加载过程
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7231632.html
Copyright © 2020-2023  润新知