最近工作在研究OGRE渲染引擎,也学到了很多东西,工作也算是忙碌充实,压力与挑战并存吧,今天断断续续看了一下OGRE里面对Pass的应用,加上之前对RenderOperation的理解,算是OGRE中Render过程最主要的两个部分,在此整理一下,以备以后的查看。
了解Pass主要是为了今后能够在渲染过程中将顶点和索引意外的信息,全部通过Pass来进行管理,儿不用自我过多的考虑细节,目前已经参照RenderOperation进行了改造,则下一步就是对Pass的构造,相对来说,Pass主要是对材质,光照,雾,混合,纹理,GPU等状态的一个管理列表,一言以蔽之,RenderOperation存储渲染对象的数据,儿Pass则存储了渲染风格。
回到本文的正文,主要集中在SceneManager类中,由于我们自身的原因或问题,不能直接使用SceneManager类来进行管理,则场景部分需要自我管理,因此需要了解OGRE的渲染过程,而我们则在逻辑上进行学习和参考。渲染过程大致如下:
1. _renderScene
OGRE的渲染起点,每一帧都会调用改函数开启渲染之旅
2. _updateSceneGraph、_findVisibleObjects
场景管理,没有深究,这个目前不是工作的重点,在以后需要的时候在深入研究,大致上就是常见的场景管理的一套,将目前相机视角下的所有Node准备更新,形成最终需要渲染的RenderQueue,(Overlay有自己的find函数)
3. _renderVisibleObjects
此时经过场景管理已经组织好渲染队列(RenderQueue)开始渲染,采用观察者模式,每一个RenderablePass分解成Pass和RenderOperation,逐个遍历渲染,
a) _setPass
设置Pass属性给RenderSystem,该函数里面的内容非常丰富,材质、纹理、GPU等都在此设置给渲染引擎,准备后续的渲染
b) _ renderSingleObject
在经过一系列准备后,开始渲染
a、b之间的界限并不清晰,很多相关属性在这两者之间都有一些重叠,最后在renderSingleObject函数中实现了最终的render,完成一帧的渲染。