探索未知种族之osg类生物---渲染遍历之器官协作
好了,现在我们经过三节的介绍我们已经大体上明确了单线程模型(SingleThreaded)下 OSG 渲染遍历的工作流程。事实上无论是场景的筛选render还是绘制cull工作,最后都要归结到场景视图(SceneView)的相应实现函数中去完成,渲染器类 Renderer 只是一个更为方便和直观的公用接口而已。
我们总结一下OSG 系统的场景图形,摄像机,图形设备,渲染器和场景视图的关系

OSG 视景器的摄像机(包括主摄像机_camera 和从摄像机组_slaves)均包括了与其对应的渲染器(Renderer)和图形设备(GraphicsContext);同时,当我们使用 setSceneData 将场景图形的根节点关联到视景器时,这个根节点实质上被添加为此 Viewer 对象中每个主/从摄像机的子节点(使用 View::assignSceneDataToCameras 函数),因而我们可以通过改变摄像机的观察矩阵来改变我们观察整个场景的视角。
场景的筛选(CULL)和绘制(DRAW)工作实质上都是由内部类 osgUtil::SceneView来完成的,但是 OSG 也为场景渲染的工作提供了良好的公用接口,就是“渲染器”。渲染器Renderer 负责将场景绘制所需的各种数据(OpenGL 状态值,显示设置,筛选设置等)传递给 SceneView 对象,并调用 SceneView::cull 和 SceneView::draw 函数,以完成场景的筛选/绘制工作。
摄像机所对应的图形设备(GraphicsContext)同样也可能负责调用 SceneView::draw 函数,这与我们选择的线程模型有关。事实上,由于 OSG 的多线程模型将为每一个图形设备创建一个专门的工作线程(使用 GraphicsContext::createGraphicsThread 函数),并在其中处理与场景绘制相关的诸多工作,因此 GraphicsContext 类在某种意义上也可以视作 SceneView的一个公有实现接口)
场景视图的工作过程中将遍历场景图形的根节点,此时只要获取对应摄像机的子节点就可以了。下面我们就正式进入 SceneView 的内部,看看 OSG 那高效的渲染后台,到底是个什么样子。
原文链接 http://www.3wwang.cn/blog/article.ftl?id=45
探索未知种族之osg类生物---渲染遍历之器官协作的更多相关文章
- 探索未知种族之osg类生物---渲染遍历之认识SceneView
前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构, a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息: b ...
- 探索未知种族之osg类生物---渲染遍历之裁剪一
前言 上面我们用了四节课的内容,讲解了一些osg概念性的内部原理.希望大家可以再看今天的讲解之前先再仔细的研究一下前四节的内容.这样你就会对整个osg的渲染过程有一个更加清晰的认知,有助于理解下面两个 ...
- 探索未知种族之osg类生物---渲染遍历之Renderer::draw()简介
我们今天进入上一节的遗留问题Renderer::draw()的探究. 1.从_drawQueue中取出其中一个sceneView对象.SceneView是对scene和view类的封装,通过他可以方便 ...
- 探索未知种族之osg类生物--渲染遍历之GraphicsContext::runOperations
osg::GraphicsContext::runOperations().我们先来看一下这个函数的执行过程. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 探索未知种族之osg类生物---渲染遍历之Renderer简介
我们继续renderingTraversals()的探究.我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作.我们在r ...
- 探索未知种族之osg类生物---渲染遍历之裁剪三
前言 在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Swi ...
- 探索未知种族之osg类生物---渲染遍历之裁剪二
前言 上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分.所以今天我们来仔细的研究一下这一部分. sceneView ...
- 《探索未知种族之osg类生物》目录
精力有限,博客园不在更新<探索未知种族之osg类生物>.在这里列出所有文章目录(持续更新)有兴趣的同学可以看看. 探索未知种族之osg类生物[目录] 前序 探索未知种族之osg类生物--- ...
- [转][osg]探索未知种族之osg类生物【目录】
作者:3wwang 原文链接:http://www.3wwang.cn/html/article_58.html 前序 探索未知种族之osg类生物---起源 ViewBase::frame函数中的Vi ...
随机推荐
- css实现布局
1.两栏布局 两栏布局一般就是一栏定宽一栏自适应(也就是流动).分的细的话还有左栏定宽右栏自适应.右栏定宽左栏自适应. 举个栗子:一栏定宽200px,一栏自适应. <head> <m ...
- 《用Python做HTTP接口测试》练习资料共享
原作者代码在https://github.com/akuing/python-http-interface-test
- Mybatis pageHelper.startPage(...)是物理分页
使用PageHelper.startPage(...)进行物理分页 业务需求只显示其中的100条数据 之前是在业务逻辑里对参数limit进行了处理 后来试试sql的limit查询100条数据 但是不确 ...
- Idea安装lombok插件【转载】
参照:http://www.cnblogs.com/holten/p/5729226.html https://yq.aliyun.com/articles/59972 lombok是一个可以通过简单 ...
- (ZT)算法杂货铺——k均值聚类(K-means)
https://www.cnblogs.com/leoo2sk/category/273456.html 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先 ...
- 2017-11-11 Sa Oct Is it online
2017-11-11 Sa Oct Is it online 9:07 AM After breakfast I tried connecting to the course selection sy ...
- 【源】ensp 绑定本地网卡与仿真设备进行通信 场景下 仿真设备ping 不通 本机IP 问题
环境:Win7, ensp 1.2.00.500 问题现象:本机可以ping 通 仿真设备的接口IP,但是在仿真设备上 ping不通 本机接口ip. 问题处理:把本机win7系统只带的防火墙关闭后,在 ...
- 【转】How to initialize a two-dimensional array in Python?
[wrong way:] m=[[element] * numcols] * numrows for example: >>> m=[['a'] *3] * 2>>> ...
- 【深入Java虚拟机(1)】:Java内存区域与内存溢出
原文出处: 兰亭风雨 内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Jav ...
- Linux 基本使用
1.mkdir 创建文件夹 mkdir filename; 2.touch 创建文件 touch file.txt; 3.chmod 变更文件或目录的权限 chmod -R u+x ./;