zoukankan      html  css  js  c++  java
  • 三维渲染引擎设计与实践(八)

    8.2三维人机交互工具

    osg实现了三维场景的漫游以及场景中三维对象的操纵。

    8.2.1漫游器

    osgGA::MatrixManipulator类

    漫游器也是事件处理器GUIEventHandler的一种。 viewer使用setCameraManipulator()函数来设置一个针对此视景器的漫游器。

    8.2.2拖拽器

    为要操纵的物体设置一个MatrixTransform父节点,通过改变这个父节点的变换矩阵的内容,进而改变作为操控对象的子节点的表现形式。

    osgManipulator库中拖拽器Dragger的实现方式

    osgManipulator::Selection类和Dragger类

    使用拖拽器实现三维交互动作的整个运作流程:

    (1)新建一种新的拖拽器,并指定作为备选对象的节点

    (2)将拖拽器和一个或多个备选对象进行绑定,如有必要,也可以与一个或多个约束对象向绑定

    (3)当用户执行交互动作时,其信息首先反映到Dragger::handle()中,并生成相应的运动命令。

    (4)分发命令dispatch()中简单地执行了这个命令

    (5)在接收者的接收函数中,完成拖拽器对备选对象的操控

    8.3二维图形用户接口

    8.3.1窗口设备

    OSG中的图形设备类(GraphicsContext)定义了场景渲染所处的设备平台,他可以是一个图形窗口,也可以是一个离屏渲染设备

    GraphicsWindow类是GraphicsContext的派生类,用于表达一个图形窗口;同时也继承了动作适配器GUIActionAdapter的成员函数

    8.3.2windows下窗口设备的实现

    P234  在普通windows窗口上嵌入osg视景器

    第十章 文件的读写机制

    10.1数据文件支持机制

    10.1.1文件格式概述

    (1)模型文件 

    (2)图像文件  主要作为纹理数据使用

    (3)视频文件

    (4)字体文件   矢量字体和点阵字体

    (5)其他类型数据

    10.1.2 osg支持的文件格式

    P283

    10.1.3 基本文件读写接口

    由osgDB负责实现,可读写的文件包括模型、图像、视频,以及字体、文本文档等。

    模型数据可以用节点类(node)来表达;图像和视频数据则使用Image对象及其子类进行存储;其他文件由基类Object保存

    读取文件得到的模型节点始终是node,

    用于保存各种文件读写参数的Options类。

    10.2文件读写插件

    10.2.1插件的编写和注册

    文件读写插件的公共接口是osgDB::ReaderWriter类

    职责链模式,由osgDB::Registry类负责

    osg中的文件读写过程大致分为两步:  首先使用职责链的机制,从已注册的插件链表中寻找一个也许能够解析当前文件的插件,并返回它得到的节点指针;如果已注册的插件不存在能够读取该文件的插件,则根据文件扩展名自动尝试加载一个同名插件,并返回它解析的结果。

    10.2.3 文件的读写回调

    osgDB定义了四种文件回调:P295

  • 相关阅读:
    C++编译器详解(二)常见precompiling 指令介绍
    C++编译器详解(一)
    Music
    jQuery语法
    Freedom DownTime
    A
    Map类
    伤不起:File.toPath() & Paths.get()
    在不同浏览器中空格显示的效果不一致的问题(主要是宽度不一致)
    关于xmlhttp会使用ie的缓存的问题及解决
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7248058.html
Copyright © 2011-2022 走看看