好了,现在我们经过三节的介绍我们已经大体上明确了单线程模型(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类生物---渲染遍历之器官协作的更多相关文章

  1. 探索未知种族之osg类生物---渲染遍历之认识SceneView

    前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构,     a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息:     b  ...

  2. 探索未知种族之osg类生物---渲染遍历之裁剪一

    前言 上面我们用了四节课的内容,讲解了一些osg概念性的内部原理.希望大家可以再看今天的讲解之前先再仔细的研究一下前四节的内容.这样你就会对整个osg的渲染过程有一个更加清晰的认知,有助于理解下面两个 ...

  3. 探索未知种族之osg类生物---渲染遍历之Renderer::draw()简介

    我们今天进入上一节的遗留问题Renderer::draw()的探究. 1.从_drawQueue中取出其中一个sceneView对象.SceneView是对scene和view类的封装,通过他可以方便 ...

  4. 探索未知种族之osg类生物--渲染遍历之GraphicsContext::runOperations

    osg::GraphicsContext::runOperations().我们先来看一下这个函数的执行过程. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  5. 探索未知种族之osg类生物---渲染遍历之Renderer简介

    我们继续renderingTraversals()的探究.我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作.我们在r ...

  6. 探索未知种族之osg类生物---渲染遍历之裁剪三

    前言 在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Swi ...

  7. 探索未知种族之osg类生物---渲染遍历之裁剪二

    前言 上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分.所以今天我们来仔细的研究一下这一部分. sceneView ...

  8. 《探索未知种族之osg类生物》目录

    精力有限,博客园不在更新<探索未知种族之osg类生物>.在这里列出所有文章目录(持续更新)有兴趣的同学可以看看. 探索未知种族之osg类生物[目录] 前序 探索未知种族之osg类生物--- ...

  9. [转][osg]探索未知种族之osg类生物【目录】

    作者:3wwang 原文链接:http://www.3wwang.cn/html/article_58.html 前序 探索未知种族之osg类生物---起源 ViewBase::frame函数中的Vi ...

随机推荐

  1. An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal.MySqlOptionsExtension

    An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructu ...

  2. java基础语法(标识符 修饰符 关键字)

    标识符 用来表示类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符.   1)只有字母(区分大小写),下划线,美元符号和数字组成,长度不受限制.注:字母包括英文26个字母 ,汉字,日 ...

  3. 分布式之redis核心知识盘点?

    考虑到绝大部分写业务的程序员,在实际开发中使用redis的时候,只会setvalue和getvalue两个操作,对redis整体缺乏一个认知.又恰逢博主某个同事下周要去培训redis,所以博主斗胆以r ...

  4. ThreadLocal总结

    一.问题抛出 SimpleDateFormat是非线程安全的,在多线程情况下会遇见问题: public static void main(String[] args) { ExecutorServic ...

  5. 用原生js简单模仿angular的依赖注入

    大家都知道angular 依赖注入很神奇,跟我们平常写代码的风格思维差别很大,不过仔细分析确是一个很有意思的东西,依赖注入早期也叫依赖倒置,是java中有的.废话不多少直接上例子 本帖属于原创,转载请 ...

  6. IDEA中显示RunDashboard

    在打开.idea/workspace.xml,找到RunDashboard的配置,添加红色字体内容 <component name="RunDashboard"> &l ...

  7. java课程之团队开发冲刺1.3

    一.总结昨天进度 1.完成任务指标,但是有些问题没有得到根本上解决,只是换方式解决了 2.使用时间:6小时 二.遇到的困难 1.在设置AlertDialog弹窗组件的时候,没有办法获取选中值,再实验多 ...

  8. Linux下使用ps命令查看某个进程文件的启动位置

    ps -ef|grep shutdown ls -al /proc/4170

  9. ActionScript3.0(AS3)中的泛型数组Vector

    Adobe官方并没有"泛型数组"的叫法,这是我自己对Vector的叫法(有点标题党),不过Vector在使用上确实跟c#中的泛型数组有些相似之处. 原作者:菩提树下的杨过出处:ht ...

  10. ECMAScript 6

    参考网上其他帖子,整理如下   ES6 就是ECMAScript 6是新版本JavaScript语言的标准. 增加了如下   Promises Promises是处理异步操作的对象,使用了 Promi ...