[转][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 ...
随机推荐
- IDEA 配置
配置sublime主题: 击链接 http://www.riaway.com,选择并下载自己喜欢的主题 file -->import setting 到刚刚下载的主题jar包,之后导入,重起i ...
- 系统事件管理(Events) ---- HTML5+
模块:events Events模块管理客户端事件,包括系统事件,如扩展API加载完毕.程序前后台切换等. 比如说:网络的链接的和断开这种事件,系统从前台走到后台这种事件: 不包括:点击和滑动页面事件 ...
- OA之框架的搭建
1.使用框架可以有效的解决耦合性过高的问题,减少代码修改的程度,同时方便添加新的功能.首先创建出基本的几个类库.这个框架就是使用基本的逻辑分层三层架构,然后进一步再使用接口对每个逻辑中的类库调用进行解 ...
- Oracle管理监控之监控表空间使用率脚本
SELECT D.TABLESPACE_NAME, SPACE "SUM_SPACE(M)", BLOCKS SUM_BLOCKS, SPACE ...
- mysql参数安全设置
MySQL安全相关的参数有哪些?该如何配置? 1.MySQL数据安全 innodb_flush_log_at_trx_commit =1 #innodb每次提交事务redo buffer 刷新到red ...
- Worst Performing Queries
WITH TMP AS ( SELECT TOP 100 CAST(SUM(s.total_elapsed_time) / 1000000.0 AS DECIMAL(10, 2)) AS [Total ...
- HTML5-Canvas 图形变换+状态保存
1. 图形变换 canvas是基于状态绘制图形的.故此一般情况下,canvas的绘制的图形路径和状态时分离的. function drawShape(ctx){ // 绘制路径 shapePath(c ...
- python之轮询、长轮询、websocket
轮询 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息. 1.后端代码 from flask import Flask,render_templat ...
- hbase Java API 介绍及使用示例
几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) ...
- Java转Exe
1.Jsmooth Java文件打包成exe文件(可以在没安装JDK的环境下运行):http://www.tuicool.com/articles/byIFJn 2.用JSmooth制作java ja ...