TinyRenderEngine 是什么?
简单的说,TinyRenderEngine 是我利用空闲时间开发的一个简单的graphics engine. 它主要做这样的事情:
1. 提供接口给用户,用来载入绘制需要的resouce(Texture, mesh等)。 这部分就是ResourceManager
2. 提供接口给用户,用来创建场景,包括场景的管理。 这部分就是SceneManager
3. 提供接口给用户,用来设定绘制方法(State, Effect等)。 这部分就是RenderSystem
4. 根据1,2,3, 绘制场景,得到最终的效果
用户的工作就是通过1,2,3 中的接口设置资源,场景和绘制算法, 剩下的工作就交给TinyRenderEngine来做了。 其中3中开放绘制方法接口给用户是基于绘制灵活性的考虑,用户可以通过自定义的.fx来实现特定的绘制效果。目前 TinyRenderEngine还是一个非常简陋的版本,很多功能正在不断扩充中。
为什么开发 TinyRenderEngine
1. 学习OGRE:实践是很好的学习方式,边学边用,能更好地理解OGRE
2. 自己很多关于实时绘制和软件工程方面的知识都停留在理论方面, 很想开发一个东西,能把这些知识综合运用起来, 而图形引擎是一个很好的项目
TinyRenderEngine 的特点
1. 借鉴了大量OGRE的思想和code. 比如ResourceManager,SceneManager模块里的东西基本上是照着OGRE写的
2. Tiny:OGRE对我来说有些庞大了,我想要的是一个“麻雀虽小,五脏俱全”的系统。一来开发时可以把精力集中在把最基本的图形引擎要素的实现上, 其次用户也不会在繁多的接口API中迷茫该用哪一个。
3. 大量用了boost的智能指针,特别是shared_ptr。 智能指针的好处是解决了对象内存管理问题
(比如内存泄露)和潜在的悬挂指针问题。当然,它也可能带来新的问题, 比如shared_ptr, 就要注意循环引用问题(比如A指向B,B指向A), 还有shared_ptr会比普通的指针占用更多的内存空间。
4. 全新设计的D3D10 RenderSystem. RenderSystem是全新设计的。 设计思想跟2一样, 尽量做到精炼简洁和好用。
TinyRendrEngine 的组织结构
下图是TinyRenderEngine的体系结构图:
整个引擎可以分为以下几个模块
1) Utils
2) MathLib
3) SceneManager
4) ResourceManager
5) RenderSystem
在以后的文章里, 我会分别介绍各个模块。