探索未知种族之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 ...
随机推荐
- c语言操作符总结
分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 其他操作符(下标引用.函数调用和结构成员) 一.算数操作符 1.算术操作符包括:+ ...
- C罗转会尤文图斯
皇家马德里头号球星C罗转会意甲尤文图斯,结束了9年的皇马生涯,已获得5座金球奖.
- endnote将参考文献导入word中
在endnote中将目标文献选中 然后返回word 将光标放到目标位置 个人网盘,endnoteX7资源 链接:https://pan.baidu.com/s/1lEocicehiPm1Ypkw768 ...
- Linux su命令
本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行, ...
- python之路:列表及元组之定义
python开发之路:列表及元组之定义 列表是以后用处较大的一个数据类型,这种数据类型可以存储按组分类的信息.好了,我不多说,开始讲了! 好了,现在我有个情景,我要存东汉时期(韩国,秦国,……)所 ...
- Netty从入门到精通到放弃
有时间想记录一下关于Netty的知识. 第一课:传统IO的特点. package com.example.aimei.controller; import java.io.InputStream; i ...
- 【译】深度双向Transformer预训练【BERT第一作者分享】
目录 NLP中的预训练 语境表示 语境表示相关研究 存在的问题 BERT的解决方案 任务一:Masked LM 任务二:预测下一句 BERT 输入表示 模型结构--Transformer编码器 Tra ...
- Java实现把图片转成字符画
1,先看效果图:
- PHP5.5.38版本Zend Guard loader for 5.5安装(详细)
第一次在博客园写东西记录自己,不,可以说第一次在网上写东西记录自己,我只是个菜鸟,具体的不太懂, 但是作为一个菜鸟我肯定把我遇到的问题给详细的表述出来,大神勿喷.在安装Zend Guard loade ...
- entityVo对象与entity对象
java Web项目Service层通用接口和entityVo对象与entity对象转化问题的解决方案 原创 2015年12月17日 15:42:09 标签: java / Service / 通用工 ...