永远也不完美的程序

不断学习,不断实践,不断的重构……

常用链接

统计

积分与排名

好友链接

最新评论

渲染流程要放到渲染物外面的地方

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

posted on 2010-06-22 17:07 狂烂球 阅读(2111) 评论(2)  编辑 收藏 引用 所属分类: 图形编程

评论

# re: 渲染流程要放到渲染物外面的地方 2010-06-22 21:21 小时候可靓了

写在场景管理里面有个好处就是可以很容易提取场景相关的信息。但是如果想要更灵活,可以再单独出一个"RenderControl"来,它专门负责渲染。毕竟场景管理和图形分开更有好处。 而对于一些高级效果的实现,则不必像OGRE那样和场景挂得很死。反之,可以在RenderControl里面做特定的效果器。 这样对于场景管理的升级和改动都不需要动用图形层的东西。而图形层的升级也不需和场景管理挂钩。---- 毕竟有些是直接做3DMMO,而有些是用3D来做2D,管理方式多有不同。。。另外,效果器也可以通过直接用材质文件来配置,只是这样材质文件就需要包含特定的信息。并且你的RenderControl应该根据不同的材质决定绘制内容(如是否多PASS,硬件是否支持等)。 这是我们工作中采用的做法,欢迎交流!  回复  更多评论   

# re: 渲染流程要放到渲染物外面的地方 2010-06-23 13:11 liangairan

@小时候可靓了
谢谢你的交流,我会尝试一下!  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理