[转帖]浅析 Quake3 渲染流程 

2006-12-19 14:33 发布

2803 0 0
浅析 Quake3 渲染流程
 
为了研究 portal 渲染技术,下载了 quake3 的源代码,上午看了一下 Renderer 的渲染流程,在这里简单描述一下。

说明:   1.主要流程都集中在 Renderer 工程中。

         2.按照调用顺序说明,这里只是给出关键的函数调用。

         3.只是描述了一般渲染流程,对于其他渲染方式没有描述。

         4.只对表面渲染流程进行了说明。

         5.不包括纹理设置、纹理坐标、雾、光照等设置的说明。

一、  函数调用流程

调用顺序
 函数名称
 函数说明
 所在源文件
 
1
 RE_EndFrame
 执行当前祯的渲染
 Tr_cmds.c
 
2
 R_IssueRenderCommands
 触发渲染命令
 Tr_cmds.c
 
3
 RB_ExecuteRenderCommands
 执行渲染命令
 Tr_backEnd.c
 
4
 RB_DrawSurfs
 渲染表面
 Tr_backEnd.c
 
5
 RB_RenderDrawSurfList
 对待渲染表面进行排序,按照分类进行渲染
 Tr_backEnd.c
 
6
 RB_BeginSurface
 初始化当前渲染命令参数
 Tr_shade.c
 
7
 RB_SurfaceFace
 将当前表面的顶点数据、顶点索引、法线、纹理坐标加入当前渲染命令中
 Tr_surface.c
 
8
 RB_EndSurface
 根据渲染命令渲染表面
 Tr_shade.c
 
9
 RB_StageIteratorGeneric
 根据渲染命令参数设置ogl渲染参数,顶点、纹理、颜色等
 Tr_shade.c
 
10
 RB_IterateStagesGeneric
 根据渲染命令pass进行渲染
 Tr_shade.c
 
11
 R_DrawElements
 渲染三角形带
 Tr_shade.c
 

 

二、  流程说明:

和大多数3D引擎一样,quake3对待渲染的图元首先进行分类,按照着色器(shader) 索引、渲染实体数量、雾索引、动态光索引排序,需要说明的是,这里将上述几项合并到一个32位整数,这会大大加快图元排序。排序使用二分算法,在ms的qsort上作了修改。

为了减少绘制次数,quake3在每次渲染前将待渲染图元的顶点数据送入到缓冲区中,并设置相应的顶点索引,由于每个渲染表面的顶点索引是局部索引,所以很容易与其它表面合并为一个索引缓冲区,这样就可以批量绘制同一渲染状态的图元。

以上只是非常简单的说明,具体的代码中要更复杂,但大体流程如此,如有错误,恳请指正。

楼主新帖

TA的作品 TA的主页
B Color Smilies

你可能喜欢

[转帖]浅析 Quake3 渲染流程 
联系
我们
快速回复 返回顶部 返回列表