[转][osg]osg渲染引擎框架图,流程图(根据《最长一帧》整理)
转自:http://m.blog.csdn.net/article/details?id=49679731
本文参考<<osg最长一帧>>, <<OpenSceneGraph三维渲染引擎编程指南>>, <<OpenSceneGraph三维渲染引擎设计与实践>> 整理而来, 感谢大牛们的精彩著作. 相比Ogre来说, Ogre代码很规范, 只是入门资料较少,如果能在学习之前能总体上对架构有个印象就好了, 免得盲人摸象啊, 不过,还好有OSG.
场景相关: Node, Geode, Group, Transform, LOD, Camera, NodeVisitor, NodeCallback
几何图形: Drawable, PrimitiveSet, Geometry, Shape, TessellationHints, Simplifier,
DelaunayTriangulator, TriStripVisitor, SmoothingVisitor
渲染相关: StateSet, Texture, Light, Material,View, ViewerBase, State, RenderLeaf,
RenderBin, RenderState,SceneView, CullVisitor,Renderer,GraphicsContext, Text
数据加载: DatabasePager
平台相关: OperationThread, GUIEVentHandler
OSG渲染引擎的核心部件:(第6日)
视景器osgViewer::Viewer应该改成osgViewer::View,多个摄像机可以共有一个图形设备。图形窗口的另一个任务是及时把系统和用户交互的事件反馈到事件处理器组中去,观察Win32平台下的窗口设备GraphicsWindowWin32中的handleNativeWindowingEvent函数和它的传入参数,hwnd,msg,lParam,wParam(例如,捕捉WM_HOTKEY系统热键消息,并传递给OSG的事件队列)
渲染场景视图树:(第20日)
OSG中所有的Drawable几何体对象都会自动关联一个StateSet对象,无论用户是否在自己的程序中作了设置。进入渲染后台之后,OSG将为场景生成“状态树”,它是由“状态节点”StateGraph和“渲染叶”RenderLeaf所组成的。
图中的“状态根节点”和“局部状态节点”都是由状态树自动生成的,其中后者的主要工作是保存和维护一些渲染后台自动创建的渲染属性;而“全局状态节点”则保存一个名为_globalStateSet的渲染状态集对象,它的取值是场景主相机的StateSet,换句话说,任何对状态树的遍历都将首先至场景主相机的渲染状态,然后才是各个节点的渲染状态,这就是_globalStateSet的功能所在。
而整个状态树的构建过程则可以参考上面的场景树结构图,其规则为:
1、状态树是根据渲染状态(stateset)来生成的,那些没有设置StateSet的场景节点将不会影响状态树的构架。
2、场景中的Drawable对象在状态树中被置入分别的渲染叶(RenderLeaf)中,而一个或多个渲染叶必然被一个状态树的末端节点(StateGraph)所拥有。
3、共享同一个渲染状态的Drawable对象(图中_drawable1和_drawable2)在状态树中将置入同一个末端节点。
生成状态树的同时,OSG渲染后台还将生成对应的“渲染树”,其组成为一个RenderStage对象和多个RenderBind对象,如果我们不使用setRenderBinDetails设置StateSet的渲染细节的话,那么所有状态树中的末端节点(其中必然包含一个或多个“渲染叶”)都会按遍历顺序保存到渲染树根节点(渲染台)中。
根据渲染顺序的不同,渲染树生出了三个分支。相应的状态节点置入各个渲染元(RenderBin)分支中,其中渲染细节设置为“RenderBin”的状态节点(StateGraph)所处的渲染元也可称为“不透明渲染元”;而设置为“DepthSortedBin”的状态节点则将其附带的渲染叶(RenderLeaf)送入“透明体渲染元”,预其中采用了按深度值降序的方式排序绘制,以获得正确的透明体渲染结果;未设置渲染细节的状态节点则直接由根节点(渲染台)负责维护。
渲染流程1:(第26日)
渲染流程2:(第25日)
节点访问:(第22日)
摄像机,图形设备,渲染器,场景图,场景视图之间的关系:(第18日)
加载数据的过程:(第15日)
两种场景结构图对比:(第14日)
多线程 使用DatabasePager加载数据的流程:(第12日)
左侧的图框表示数据的检索和输入, 中间的白色框表示用于数据存储的内存空间,而右边的图框表示存储数据的输出。此外,蓝色图框表示可以在DatabaseThread线程中完成的工作, 而橙色图框表示由线程之外的函数完成的工作。
消息事件处理流程:(第8日)
它负责把WM_*消息转化并传递给osgGA::EventQueue消息队列。通常的GUI窗口系统都会将屏幕左上角定义为(0,0),右下角定位为最大。但是OSG的视口坐标系定义为左下角为(0,0)
图形设备抽象:

先看整体, 然后看局部, Osg的结构会了然于胸.
[转][osg]osg渲染引擎框架图,流程图(根据《最长一帧》整理)的更多相关文章
- OSG(OpenSceneGraphic) 渲染引擎架构--整体认识 [转]
原文:http://blog.csdn.net/zangle260/article/details/41123067?utm_source=tuicool 本文参考<<osg最长一帧> ...
- [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述
1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...
- gentoo 画框架图,流程图
需要话框架图,流程图的时候,只需要安装 dia 软件就可以了.
- 剖析虚幻渲染体系(14)- 延展篇:现代渲染引擎演变史Part 1(萌芽期)
目录 14.1 本篇概述 14.1.1 游戏引擎简介 14.1.2 游戏引擎模块 14.1.3 游戏引擎列表 14.1.3.1 Unreal Engine 14.1.3.2 Unity 14.1.3. ...
- [OSG]OSG例子程序简介
1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...
- [原][OSG]OSG例子程序简介
1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...
- 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...
- iOS引入JavaScriptCore引擎框架(二)
为何放弃第一种方案 UIWebView的JSContext获取 上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebVi ...
- iOS引入JavaScriptCore引擎框架(一)
JavaScriptCore引擎 我们都知道WebKit是个渲染引擎,简单来说负责页面的布局,绘制以及层的合成,但是WebKit工程中不仅仅有关于渲染相关的逻辑,也集成了默认的javascri ...
随机推荐
- 170713、springboot编程之多数据源切换
我们在开发过程中可能需要用到多个数据源,我们有一个项目(MySQL)就是和别的项目(SQL Server)混合使用了.其中SQL Server是别的公司开发的,有些基本数据需要从他们平台进行调取,那么 ...
- PHP对象在内存中的分配
对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上 说大体上是分为4 段,栈空间段.堆空 ...
- shell 环境变量的知识小结
环境变量的知识小结:·变量名通常要大写.·变量可以在自身的Shell及子Shell中使用.·常用export来定义环境变量.·执行env默认可以显示所有的环境变量名称及对应的值.·输出时用“$变量名” ...
- 流畅的python 读书笔记 第二章 序列构成的数组 列表推导
列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列.如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会. 2.2.1 列表推 ...
- MFC截图和界面刷新相关问题
问题描写叙述: 就是首先用CDC来截图,保存图片的路径通过dlg窗体来手动设置并传入.但是截下来的图片就会连带那个对话框也截图下来. 就是这样.我想截后面那个图.前面这 ...
- MegaCli 监控raid状态
MegaCli 监控raid状态 http://blog.chinaunix.net/uid-25135004-id-3139293.html 简介 MegaCli是一款管理维护硬件RAID软件,可以 ...
- 【开发者笔记】C#连接mysql问题记录
1.概述:C#在调用mysql.data.dll连接本地数据库时报错,连接远程Linux服务器上的mysql服务器正常 2.报错记录,当前连接字符串 <add key="dbStrin ...
- Openstack(四)Mysql主从
4.1 安装mysql 4.1.1 安装依赖 # yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop ...
- (2)R中的数据类型和数据结构
R中的数据结构主要面向<线性代数>中的一些概念,如向量.矩阵等.值得注意的是,R中其实没有简单数据(数值型.逻辑型.字符型等),对于简单类型会自动看做长度为1的向量.比如: > b= ...
- SQL sqlserver order by 1,order by 后面直接加数字,多个字段排序
①select * from table order by n 表示select里面的第n个字段 ②多个字段排序