好了,现在我们经过三节的介绍我们已经大体上明确了单线程模型(SingleThreaded)下 OSG 渲染遍历的工作流程.事实上无论是场景的筛选render还是绘制cull工作,最后都要归结到场景视图(SceneView)的相应实现函数中去完成,渲染器类 Renderer 只是一个更为方便和直观的公用接口而已. 我们总结一下OSG 系统的场景图形,摄像机,图形设备,渲染器和场景视图的关系 OSG 视景器的摄像机(包括主摄像机_camera 和从摄像机组_slaves)均包括了与其对应的渲染器(R…
前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构,     a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息:     b 组节点(osg::Group)及其派生出的各种特殊功能节点则作为场景树的各个枝节节点,它们也可以拥有不同的渲染状态:     c 整个场景的根节点(root)有且只有一个节点可以直接作为,使用setSceneData 将其设置给场景的视景器系统,即等同于将整个场景树传递给 OSG 的渲染和显示系统…
前言 上面我们用了四节课的内容,讲解了一些osg概念性的内部原理.希望大家可以再看今天的讲解之前先再仔细的研究一下前四节的内容.这样你就会对整个osg的渲染过程有一个更加清晰的认知,有助于理解下面两个函数cull()和draw(). osg::Util::SceneView::cull() 好,相信大家已经又复习了上面几节的内容,那我们就进行sceneView的第一个重要功能osg::Util::SceneView::cull()函数.场景的筛选函数 cull 主要完成了以下几个工作. 1.通过…
我们今天进入上一节的遗留问题Renderer::draw()的探究. 1.从_drawQueue中取出其中一个sceneView对象.SceneView是对scene和view类的封装,通过他可以方便的访问到scene或者view中的成员,以及最主要的作用是封装了更新,挑选,和绘制遍历,但是并不启用DatabasePager. 2.sceneView->collateReferencesToDependentCameras();得到所有的sceneView依赖的相机的引用,因为我们正在运行与主线…
osg::GraphicsContext::runOperations().我们先来看一下这个函数的执行过程. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 void GraphicsContext::runOperations() {   …
我们继续renderingTraversals()的探究.我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作.我们在renderingTraversals()中总是遇到这个Renderer类,我们就先补充一下他的介绍. osgViewer::Renderer类为摄像机渲染场景的工作提供了一个公有接口.通常是在View::setCamera(osg::Camera* camera)函数中进行默认绑定的. ? 1 2…
前言 在osgUtil::CullVisitor,我们发现apply函数的重载中,有CullVisitor::apply(Group& node),CullVisitor::apply(Switch& node), CullVisitor::apply(LOD& node),CullVisitor::apply(Geode& node),CullVisitor::apply(Node& node)是一样的函数内容.所以这五个函数我们就挑出CullVisitor::a…
前言 上一节我们大致上过了一遍sceneView::cull()函数,通过研究,我们发现上图中的这一部分的代码才是整个cull过程的核心部分.所以今天我们来仔细的研究一下这一部分. sceneView::cull()函数核心部分 1.cullVisitor->pushStateSet函数: A._currentStateGraph = _currentStateGraph->find_or_insert(ss); 判断传入的渲染状态 ss 是否已经存在于这个状态节点中,如果存在则返回找到的那个…
精力有限,博客园不在更新<探索未知种族之osg类生物>.在这里列出所有文章目录(持续更新)有兴趣的同学可以看看. 探索未知种族之osg类生物[目录] 前序 探索未知种族之osg类生物---起源 ViewBase::frame函数中的ViewerInit()及realize() 探索未知种族之osg类生物---器官初始化一 探索未知种族之osg类生物---器官初始化二 探索未知种族之osg类生物---器官初始化三 探索未知种族之osg类生物---器官初始化四 ViewBase::frame函数中…
作者:3wwang 原文链接:http://www.3wwang.cn/html/article_58.html 前序 探索未知种族之osg类生物---起源 ViewBase::frame函数中的ViewerInit()及realize() 探索未知种族之osg类生物---器官初始化一 探索未知种族之osg类生物---器官初始化二 探索未知种族之osg类生物---器官初始化三 探索未知种族之osg类生物---器官初始化四 ViewBase::frame函数中的advance() 探索未知种族之o…