在Ogre之前的图形引擎(卡马克的时代)突出的是运行速度和效率,所以在决策设计结构和效率的时候一般选择后者,比如“尽量少用虚函数”,“尽量少用RTTI”。这些都是为了提高效率的选择,
而Ogre的优点和缺点都是,过分注重软件结构而相对忽视运行效率,这在当时没有成功作品前是一直被诟病的(当时有一种说法Ogre用来学习可以但是做不出来东西,当时攻击Ogre的很重要的一个点竟然是“有这么多虚函数”)。但在设计上,至少在它的那个时代,很强悍。
有两个显著的特点(今天来看已经很寻常,但是十几年前当时确实算是创举),
1 大量的使用设计模式。
2 节点和挂接物使用组合而不是继承。
Ogre的老大“辛巴达”除了是一个图形学大师之外,更重要的他是一个面向对象编程的大神。多年的面向对象编程方式让他的架构设计在当时脱颖而出。
另外一件事情,就是“辛巴达”的偏执,坚决认为不应该捆绑用户去使用其他的工具,提出“我是渲染引擎而不是游戏引擎”。要开发者自己去组合相关的其他工具(比如物理碰撞人工智能等等)。在提供给开发者自由的好处下同时也带来了对开发者要求的提高。这也是后期萧条的原因。用Ogre开发游戏,开发公司至少要自己写游戏架构和工具。当初我也在写,每个用Ogre的人都有一套自己的游戏架构。
是Unity的横空出世,虽然Unity不是开源,但是价格大家也承受得起,开发起来比Ogre容易很多,大家也不用写工具和架构了。更重要的是,在结构上Unity是基于组件组合,而不是面向对象的继承,任何人都应该知道组合优于继承。
2010年,我离开了Ogre社区,所以之后的发展我就没有资格去评价了。
回过头来看,Ogre之前是效率重于结构,Ogre之后是结构重于效率。Ogre很多设计,在那个时代都是前瞻性的,也教育了很多人,比如我,对面向对象设计的理解和启蒙。Ogre在软件结构上做得很好,但Ogre在简化设计上做得不好(甚至反其道来做),导致后来(在廉价引擎上)被Unity超越。
今天来看,可能用Ogre的人并不多了,但是从学习图形学的角度来看,Ogre仍然是一个很好的选择,并且,在一些仿真学的领域中,Ogre仍然是一个很棒的东西。
最后作为开源软件,可能用的人会越来越少,但是消亡也很难,这是开源软件的共性。
搞Ogre的,在我前面是MAGE小组和燕尘,现在都没人记得了吧