用场景树来组织场景

转载 2007年09月21日 11:54:00

osg存在两棵树,场景树和渲染树。场景树是一颗Node组成的树,这些Node可能是矩阵变换,或者是状态切换,或者是真正的可绘制对象,它既反映了场景的空间结构,也反映了对象的状态。而渲染树则是一颗以StateSetRenderLeaf为节点的树,它可以做到StateSet相同的RenderLeaf同时渲染从而不用切换Opengl状态,并且做到尽量少的在多个不同State间切换。渲染树在CullVisitorcull过程中逐渐创建。

SceneView包含两个与渲染相关的两个成员,一个RenderStage对象与StateGraph对象

StateGraph顾名思义,就是以状态为节点的图。StateGraph包含了真正的可渲染对象RenderLeaf,但是一个StateGraph是不够的,因为不同的RenderLeaf可能会有不同的StateSet,于是StateGraph内部包含一个以StateSetkeyStateGraphvalueMap对象,从而形成一颗渲染树

渲染时以该渲染树为基准按一定顺序逐渐渲染各个RenderLeaf。以何种方式遍历该树呢,这正是RenderStage的任务。

RenderStageRenderBin派生

RenderBin包含了一个StateGraphList,该List将渲染树中的各个StateGraph摘取出来,形成列表。形成列表的过程就是遍历渲染树的过程。RenderStage可以在RenderBin渲染之前之后做一些预处理和后处理,以完成一些特殊效果。

RenderStage包含两种类型的RenderBin,透明与不透明的。对于Transparent RenderBin比较难处理,就是必须按深度顺序调用gl函数渲染对象,否则可能半透明会有问题。对于Opaque RenderBin则没有此限制,它只需按照尽量少切换状态的原则排列StateGraph即可。

StateSetSetRenderingHint函数可以用来控制使用那个RenderBin进行渲染,题外话,StateSetsetAttributeAndModes函数可以指定AlphaFuncBlendFunc,前者功能相当于Alpha测试,后者则反映了Alpha混合的方式。使用方式类似下面:

BlendFunc* func = new BlendFunc();

func->setFunction(...);

dstate->setAttributeAndModes(func, StateAttribute::ON);

 

可以参考的相关osg代码:

void CullVisitor::apply(Geode& node)

void CullVisitor::addDrawableAndDepth(osg::Drawable* drawable,osg::RefMatrix* matrix,float depth)

StateGraph的部分函数。。。

void RenderLeaf::render(State& state,RenderLeaf* previous)

void RenderBin::drawImplementation(osg::State& state,RenderLeaf*& previous)

void RenderStage::drawImplementation(osg::State& state,RenderLeaf*& previous)

 

 

相关文章推荐

osg场景中模型的大小匹配问题(续再谈osg中的树)

在场景中树的问题解决后,原以为就快要结束了。可没想到硬是半路又杀出一个头疼的问题。再换过地形后,导入osg场景中的各个模型大小不匹配!具体情况就是osg场景中的一个房子或一棵树就可能遮盖了整个地形。刚...

OSG多线程,多显示场景图形设计

参考路径http://www.cnblogs.com/mazhenyu/archive/2013/01/25/2876738.html 多线程,多显示场景图形设计: 一种新的过程模型 关于...

osg场景中的树

在整个项目中,我纠结最久,最多的应该就是树这个问题了。因为树的数量多,结构比较复杂。所以如果处理不当会给渲染造成很大压力。 构建osg场景中的树的方法可以有很多种: 1、Billboard树 2...

OSG渲染树

osg存在两棵树,场景树和渲染树。场景树是一颗Node组成的树,这些Node可能是矩阵变换,或者是状态切换,或者是真正的可绘制对象,它既反映了场景的空间结构,也反映了对象的状态。而渲染树则是一颗以St...

开始研究OpenSceneGraph(OSG)

本文翻译自Don Burns和Robert Osfield(缺席)在Image 2003会议上的演讲幻灯片。 原文下载地址:http://www.openscenegraph.com/osgwiki...

再谈osg场景中的树(3dmax建模)

上次只是说了下osg场景中用怎样的树比较好,说到了一些解决方案也只是一笔带过,所以今天给补上。 如果您和我一样的苦逼,用的是3dmax建的场景,然后场景又比较大,树木又比较多。那就意味着树木和地形,...

C++笔试题目大全(笔试宝典)(不断完善中)

Normal 0 7.8 磅 0

ogre场景组织分析

  • 2012-03-01 16:52
  • 731KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)