转自: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渲染引擎框架图,流程图(根据《最长一帧》整理)的更多相关文章

  1. OSG(OpenSceneGraphic) 渲染引擎架构--整体认识 [转]

    原文:http://blog.csdn.net/zangle260/article/details/41123067?utm_source=tuicool 本文参考<<osg最长一帧> ...

  2. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开发复杂性 ...

  3. gentoo 画框架图,流程图

    需要话框架图,流程图的时候,只需要安装 dia 软件就可以了.

  4. 剖析虚幻渲染体系(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. ...

  5. [OSG]OSG例子程序简介

    1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...

  6. [原][OSG]OSG例子程序简介

    1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...

  7. 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架

    高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...

  8. iOS引入JavaScriptCore引擎框架(二)

    为何放弃第一种方案 UIWebView的JSContext获取     上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebVi ...

  9. iOS引入JavaScriptCore引擎框架(一)

    JavaScriptCore引擎     我们都知道WebKit是个渲染引擎,简单来说负责页面的布局,绘制以及层的合成,但是WebKit工程中不仅仅有关于渲染相关的逻辑,也集成了默认的javascri ...

随机推荐

  1. less常见的操作

    less初体验:     mixin : 混合,将一堆属性从一个规则集到另外一个规则集: (如果有公用的样式,可以做提取:)     清除浮动经典代码:     .clearfix {   displ ...

  2. Yii 的session 实现返回上上页面

    学习session的页面:http://www.yiichina.com/doc/guide/2.0/runtime-sessions-cookies 关键摘要: $session = Yii::$a ...

  3. Windows中的DNS服务——正向解析&反向解析配置 分类: AD域 Windows服务 2015-07-16 20:21 19人阅读 评论(0) 收藏

    坚信并为之坚持是一切希望的原因. DNS服务是AD域不可或缺的一部分,我们在部署AD域环境时已经搭建了DNS服务(windows server 2008 R2域中的DC部署),但是DNS服务的作用还是 ...

  4. Mongodb3.X版本的 的用户认证

    一直使用公司的mongodb环境,本地的mongodb没有开启认证,为了环境更一致,决定加上本地mongodb的认证,不过在这个过程中发生了点波折. 我使用的是window版本的3.2,公司使用的是2 ...

  5. python中的接口和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束 python的类是可以写任意个方法的 定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有 ...

  6. Python并行编程(十二):进程同步

    1.基本概念 多个进程可以协同工作来完成一项任务,通常需要共享数据.所以在多进程之间保持数据的一致性就很重要,需要共享数据协同的进程必须以适当的策略来读写数据.同步原语和线程的库类似. - Lock: ...

  7. (2.4)DDL增强功能-数据汇总grouping、rollup、cube

    参考:https://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.html 1.rollup (1)rollup在group by 子句中使用 ...

  8. (转) 密码学中的“盐值 Salt”

    为什么要在密码里加点“盐” 盐(Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”. 以上这句话是维基百科上对于 ...

  9. PAT 1075 PAT Judge[比较]

    1075 PAT Judge (25 分) The ranklist of PAT is generated from the status list, which shows the scores ...

  10. Python---1. 基础数据类型

    转载:  Py西游攻关之基础数据类型