黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks

为什么需要osgViewer

在过去的几年里,用户已经将现有的viewer库osgProducer(基于Producer)发展到远超出它设计初期的目的。开发Producer之外的窗体工具箱的难题已被解决,支持处理一个场景具有的多个独立的view,特别复杂的是当应用程序使用数据分页,而且还需要接二连三的打开/关闭窗口的时候。

用户与遇到的其他问题还有生成的复杂性,有一系列的额外的依赖的障碍需要解决。当学习这些API的时候,有很多的API需要去学习,这会增加学习曲线的陡峭度。如果我们提供一个原生的viewer库,都使用一样的矩阵、内存管理和编码形式和设计,这样的话学习起来就会变得简单。支持多种窗体工具箱和复杂的viewer配置也非常易学易用,且用户可以像使用组件一样使用view而不是像以前一样需要了解很多的实现细节。

osgViewer的目标

osgViewer背后的概念在于满足一系列类的需求,这些类要求能够无缝的支持广泛的窗口工具包(即QT、Win32、MFC、WxWindows、Fox、FLTK、SDL、AGL/CGL等等)。也同时提供一种方便的架构来管理简单的窗体、单摄像机视点的应用程序到复杂的多窗口、多视点、多线程的应用程序。

目前的状况

osgViewer的大部分特性都完成了,Windows、X11和OSX Carbon的支持已经被集成,也附带了两个Viewer和CompositeViewer类。新的线程模型已经被引入,可以更好的支持现有的双核CPU。在Windows平台下,多线程、多窗口已经被完整的支持,使其能够和其他平台得到一致的伸缩性。

所有的OpenSceneGraph例子现在已经被移植到使用osgViewer,最多的改变还在于从osgProducer::Viewer到osgViewer::Viewer的细微改变。

OpenSceneGraph的2.0发行版将会看到osgViewer作为标准的viewer库,同时osgProducer库也转移到自己独立的一个发行。osgProducer会与OpenSceneGraph的主要发布一起进行维护。这次OpenSceneGraph的改动将不会要求Producer作为依赖了,所以只有OpenThreads才会作为主要的额外依赖。

osgViewer相关的功能所关联的类:

osg核心库:

  • osg::Camera(之前被叫做 osg::CameraNode)从1.0版本起。这个节点包含一个它渲染的场景。具有投影和视图矩阵、视口和一个可选的osg::GraphicsContext让其渲染,同样还包含一些选项能够让其配置为渲染到纹理。
  • osg::OperationsThread/GraphicsThread - 从1.0版本起。是一个线程类,可以让一系列GraphicsOperation在另外一个单独的线程进行。
  • osg::GraphicsContext - 从1.0版本起。是一个基础类,将实现创建和使用图形上下文的细节进行了抽象-它可能是一个pbuffer或者是一个传统的图形窗口。GraphicsContext"有一个"可选的GraphicsThread。目前用在osg::CameraNode上以便管理pbuffer渲染到纹理的实现。
  • osg::View - 管理所有摄像机的类。这些摄像机协同一致的工作,以渲染单一、协调一致的场景的视野。一个视野有一个主osg::Camera控制场景的视图和投影矩阵,和一系列的从动的osg::Cameras。这些从动的摄像机的视野和投影矩阵和主摄像机的矩阵有一定关系,每一帧都更新。主从摄像机都可以用于渲染。

osgGA库:

  • osgGA::EventQueue - 从1.0版本起,可以按照以前的样子使用, 只是命名空间编程了osgViewer。osgGA::GUIEventAdapter - 从1.0版本起,因为它的继承不是很理想,和仅仅关联到了鼠标和键盘事件,但是在通用的和可扩展的osgViewer::Event类中作为一个位置标识符的还是差强人意。
  • osgGA::GUiEventHandler - 从1.0版本起,与GUIEventHandler有点相像 - cludgy??? 和需要在最终的osgViewer库进行更新,但是在构造osgViewer原型时还是很好的。
  • osgGA::EventVisitor - 从1.0版本起,需要在上面做一些工作,但是在osgViewer::EventVisitor会一直照这个模式发展下去。

osgViewer库:

  • osgViewer::View - osg::View的子类,增加更高层次的viewer功能。
  • osgViewer::Scene - 管理场景图数据的辅助类。
  • osgViewer::GraphicsWindow - 实现OpenGL图形化窗口的基类,它继承于osg::GraphicsContext,不同在于增加了事件处理。
  • osgViewer::Viewer - osgProducer::Viewer的功能替换。osgViewer::Viewer “是一个” osgViewer::Viewer,所以能够从View获得多窗体/多摄像机支持,但从概念上来说还是只在一个单独的场景里管理了一个单独的视野。
  • osgViewer::!CompositeViewer - 通过使用的osgViewer::View一个列表,增加对需要在一个场景里面多个视点的viewer的支持。这种复杂的viewer功能在先前的OpenSceneGraph里面并没有被很简单的实现,但是现在变得很直接了。

目前有三种具体的osgViewer::GraphicsWindow的实现,这些实现支持所有的OpenSceneGraph发行所在的平台。

  • osgViewer::GraphicsWindowWin32 - Windows支持
  • osgViewer::GraphicsWindowX11 - 所有Unix平台的X11 支持(包含OSX)。
  • osgViewer::GraphicsWindowCarbon - OSX的Carbon支持.
  • osgViewer::GraphicsWindowEmbedded - 一个GraphicsWindow的适配器版本,这个版本不执行大部分的函数操作,但是允许Viewer和CompositeViewer类能够在外部的窗体里面进行嵌入工作,例如被QT、FLTK创建的。

为了测试osgViewer::SimpleViewerosgViewer::GraphicsWindow的可行性,这里有为各种窗体工具箱里写的若干个基于simpleviewer的示例。

  • osgviewerGLUT
  • osgviewerFLTK
  • osgiewerQT
  • osgiewerWX
  • osgviewerSDL
  • osgviewerCocoa
  • osgviewerMFC
posted on 2012-01-09 21:14 情绝格调(fresmaster) 阅读(810) 评论(0)  编辑 收藏 引用 所属分类: Graphics

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理