研究ogre会发现,整个渲染流程是放到了scenemanager里面实现,而不是放到具体的渲染物里面。这样做的好处是:所有渲染物在场景中统一了渲染流程,而且比放到渲染物内更灵活。举个例子,假如渲染物要在某个特定环境(假如是某个rendertarget)下渲染,而且慢慢旋转。这时没有场景,没有场景结点,但渲染物的渲染流程却写在了渲染物内部,因此,所有的矩阵变换对渲染物都起不了作用。这时怎么办呢?是要修改渲染物的渲染函数,还是为这个rendertarget添加一些场景的属性,能让这个渲染物走正常的流程呢?所以问题就产生了,把渲染流程写死在渲染物内是不好的。
根据研究看到,ogre的整个渲染流程写在scenemanager就避免了上述的问题的产生。所以在引擎设计时,尽量把所有的渲染物的渲染流程提取到外面进行,而不要写死在里面。
渲染流程大概如下:
1、设置世界矩阵。
2、提取渲染物的材质,走多pass流程。
3、设置渲染物的纹理等。
4、设置渲染物在当前pass的渲染状态。(包括光照,gpu program等)
5、提交顶点数据(SetStreamSource)。
6、渲染(Draw)。