转自:http://blog.csdn.net/wang15061955806/article/details/51603083
相机与视图
    osg::Camera类用来管理OSG中的模型——视图矩阵,相机的管理主要通过各种变换来实现的。
    osgViewer::Viewer为一个单独的场景scene保存一个单独的view,单视图的管理是通过osgViewer::Viewer来实现的。在osgViewer::Viewer中,只允许单视图,单视图可以同时包含多个相机渲染,也可以在多窗口中渲染。为了能够进行正常的渲染,还需要创建一个图形环境(默认的情况下已经创建了一个)。有时为了方便控制场景渲染,需要设置一个合适的图形环境窗口。
    osg::View主要用来管理所有的相机视图。它包含一个主相机和N个从属相机(Slave)。如果View仅有一个主相机,则该主相机用来负责控制和渲染场景视图。如果包含从属相机,则主相机用来负责控制管理视图,从属相机用于渲染场景。
    osgViewer::View:可以挂节事件、处理事件、并负责创建相机和创建图形环境窗口。
    osgViewer::ViewBase:具有管理渲染的线程、负责设置线程模式、启动相关线程等功能。
    osgGA::GUIActionAdapter类:GUI动作适配器,用来向系统发送一些请求,以实现一些特定的操作。这也是GUI时间适配器的主要组成部分之一。
    一个视景体可以包含一个主相机和多个从相机,setUpViewInWindow()的作用是根据给定的窗口参数来创建一个图形设备。
 
    osg::DisplaySetting保存了与图形显示,尤其是立体显示有关的所有信息。
 
    了解整个屏幕的分辨率可以用这个类:osg::GraphicsContext::WindowingSystemInterface意思是说系统接口,可以获得当前环境的各种信息。有一方法加getScreenResolution,可以得到分辨率。
 
    Camera::SetViewport决定了相片也就是图像的大小;osg::GraphicContext::Traits的Width,Height定义了在屏幕上显示的相框的大小。一般viewport和相框一样大,如果viewport大于相框,则在相框中只显示一部分场景;如果viewport小于相框,相框中会有一部分的空白。
 
    场景节点树是通过场景中的一个或多个相机节点Camera来进行管理的,不属于任何相机的场景节点无法用于渲染过程;图形设备(GraphicContext)则表示相机的底层图形窗口或者缓存,并且传递了各种各样的交互事件;视图(View)和视景器(Viewer和CompositeViewer)负责将相机节点及其子树应用与系统的仿真过程,并加载漫游器、交互事件处理器和各种场景浏览的辅助部件。它们共同完成了场景数据的管理和用户交互的系统前端工作。
   而系统前端与渲染后台的接口,也就是即将介绍的渲染器(Renderer)和场景视图(SceneView),则需要完成以下几个功能:
      1、将场景节点树传递给CullVisitor,以裁剪场景信息并生成后台的状态树和渲染树。
      2、接下来,按照顺序遍历渲染树,执行各个渲染叶的绘制,将结果输出到图形设备。
      3、监控前端数据更新和后台裁剪渲染的过程,避免产生数据变度的冲突。
      4、如有可能,采取多线程、多CPU的方式来实现整个工作流程。
  渲染器为相机节点树与渲染后台之间提供了一个公共的接口。当向场景中添加一个新的相机(Camera)时,一个与之关联的渲染器(Renderer)也会被自动创建;而当我们准备执行场景的裁剪和绘制时,渲染器会负责传递场景与用户数据,进而交由系统后台执行裁剪与绘制工作。
  同时,渲染器派生子Operation类,也就是说它属于一种用户操作,可以追加到操作线程OperationThread和GraphicThread中,进而可以在图形设备或相机节点的线程中运行,完成多线程环境下的渲染接口操作。
 
  渲染器并没有直接将场景节点传递到裁剪访问器,也不负责记录渲染树或状态树的节点数据,它自动创建并保存的osgUtil::SceneView对象,也就是场景视图对象,才是裁剪和绘制工作的真正执行者。
  这里有一个值得注意的设计理念:OSG中,与用户直接交互的系统前端工具——GraphicsWindow、View、Viewer、CompositeViewer 以及Render,均通过osgViewer库进行定义;而渲染后台的功能类,包括CullVisitor、StateGraph、RenderLeaf、RenderStage、RenderBin,以及即将介绍的SceneView,均为osgUtil库的组成部分。换句话说,任何用户都可能使用自己系统前端替代osgVIewer内容,并通过操作SceneView实现对渲染后台的调用;而高级使用者甚至可以考虑使用另外的渲染后台,配合OSG的场景结构和交互系统来实现渲染,当然这较为麻烦一些。

OSG相机与视图的更多相关文章

  1. [osg]OSG相机添加动画路径

    查看osg坐标系,camare默认姿态:http://www.cnblogs.com/lyggqm/p/8073688.html 首先搞清楚osg的坐标系以及osg::camare的默认姿态 下代码面 ...

  2. OSG的HUD抬头文字显示

    原文:http://blog.csdn.net/tmljs1988/article/details/7562926 可以运行 1.       HUD流程图: 完整源代码如下: /*OSG中的HUD, ...

  3. [osg][osgEarth][原]基于OE自定义自由飞行漫游器(第二版)

    在初级版上,进行新的漫游方式调整 头文件: #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include ...

  4. [osg][osgEarth][原]基于OE自定义自由飞行漫游器(初级版)

    由于受够了OE的漫游器,想搞个可以在全球飞行的漫游器,所以就做了一个: 请无视我的起名规则······ 类头文件:EarthWalkManipulator.h #pragma once //南水之源 ...

  5. [osg][原]自定义osgGA漫游器

    相机矩阵变化基础:http://blog.csdn.net/popy007/article/details/5120158 osg漫游器原理:http://blog.csdn.net/csxiaosh ...

  6. 探索未知种族之osg类生物---呼吸分解之事件循环一

    事件循环和更新循环 终于到了我们嘴里经常念叨的事件循环.更新循环以及渲染循环了.首先我们来区分一下事件循环和渲染循环,他们两个首先是两个不同顺序执行的过程,我们有时候会用到任意node的updateC ...

  7. 探索未知种族之osg类生物---器官初始化二

    那我们回到ViewerBase::frame函数中来,继续看看为什么osg生命刚刚出生的时候会大哭,除了初始化了eventQuene和cameraManipulator之外还对那些器官进行了初始化.在 ...

  8. OSG入坑之路[转]

    转载自:https://segmentfault.com/a/1190000010506374?utm_source=tag-newest osg插件原理:https://blog.csdn.net/ ...

  9. 相机标定:关于用Levenberg-Marquardt算法在相机标定中应用

    LM算法在相机标定的应用共有三处. (1)单目标定或双目标定中,在内参固定的情况下,计算最佳外参.OpenCV中对应的函数为findExtrinsicCameraParams2. (2)单目标定中,在 ...

随机推荐

  1. idea 破解代码

    下面是idea的破解方法,手动执行对应的main方法即可.亲测Idea 14 完美破解~~废话少说,上代码... package com.jd.serializable; import java.ma ...

  2. 0007-一套完整的CRUD_DEMO

    好久没写了,一直在忙别的东西,但是想想,还是把之前的补充完整好了.给大家一个参考,也为自己留个备份. 首先写一个Html作为内容载体,主要结构如下 <div ui-view="navb ...

  3. windows zabbix_agent 客户端安装部署

    1.下载客户端:zabbix_agentd.zip 2.在c盘创建文件夹zabbix,解压conf和bin目录 3.将conf下的zabbix_agentd.win.conf 修改为zabbix_ag ...

  4. mysql注入快速学习基础

    前言: sql注入想学好,学通.必须得了解一下基础的SQL 语句.这里我快速理一理 正文: 搭建环境建议下phpsduy快速搭建 select * from kasi select 字段名 from ...

  5. python开发_python中的list操作

    对python中list的操作,大家可以参考: Python list 操作 以下是我个人的笔记: ============================================ Add b ...

  6. GIL与线程、进程、协程

    GIL全局解释器锁: 1.相信大家都知道python代码是不能直接被机器cpu识别和执行的,它要经过python解释器(也就是我们执行时候的python3 name.py)被编译成机器语言,pytho ...

  7. php效率优化

    php效率优化 最近在公司一边自学一边写PHP程序,由于公司对程序的运行效率要求很高,而自己又是个新手,一开始就注意程序的效率很重要,这里就结合网上的一些资料,总结下php程序效率优化的一些策略:1. ...

  8. Django的contenttypes应用、缓存相关

    一.django的contenttypes contenttypes 是Django内置的一个应用 , 可以追踪项目中所有app 和 model 的对应关系, 并记录djang_content_typ ...

  9. github提交表情包

    emoji-list emoji表情列表 目录 人物 自然 事物 地点 符号 人物 :bowtie: :bowtie: :smile: :smile: :laughing: :laughing: :b ...

  10. 全面了解POI操作Microsoft Office(Word、Excel、PowerPoint)

    POI 与 Microsoft Office 1. POI 简介 POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft Office 办公套 ...