因为项目的需要,这两天看了部分OGRE的源码,主要是框架部分,略有体会,写下来仅作为记录,语句或有杂乱,如不慎被各位牛人看到,调笑之余欢迎各种指点。
世上有两种图形引擎,一是直接与硬件打交道,如D3D和OPENGL;一是在前者的基础上,以更高效的图形开发为目的,通过封装更多底层细节,所形成的图形引擎,如unreal、source。
底层图形语言D3D和OPENGL,实现了对硬件细节层面的封装,提供了统一编程接口,让程序员从各种底层硬件接口中解脱出来,专注于相对高层的代码层面。
高层图形语言把这个思想更进一步,通过对D3D和OPENGL的更多细节封装,隐藏了与图形加速卡直接交互的接口,提供了场景管理等各种管理模块,以及运用多种设计模式,达到使游戏开发高效率,高重用性,低错误率等等好处。
OGRE作为同时支持D3D与OPENGL的开源引擎,其底层部分就需要对这两者进行封装。为了便于理解。可以暂时将OGRE分成两个层面:底层图形语言无关的功能层面和底层图形语言相关的实现层面。(鉴于已看的代码不多,姑且暂时这么分吧,可能某些部分不能单纯这么划分,就先不管了:)。
功能层面上,OGRE通过Manager,实现对log,controller,scene,Dynlib,archive,material,mesh,particle_system,skeleton,resource,shadow_texture,render_system,等功能的管理。这些模块都生成相应的Manager实例,放于root class中,在工程其他地方中可以通过调用root的getXX方法,或者ClassName::getSingleton()的方法,获得该类的单例。因为每个manager类都是多重继承自它的基类和一个singleton<classA>模板类,用这种方法保证了各manager类实例的唯