人气 239

[游戏程序] [转帖]浅析 Quake3 渲染流程 [复制链接]

九艺网 2017-3-10 17:01:40

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
浅析 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在每次渲染前将待渲染图元的顶点数据送入到缓冲区中,并设置相应的顶点索引,由于每个渲染表面的顶点索引是局部索引,所以很容易与其它表面合并为一个索引缓冲区,这样就可以批量绘制同一渲染状态的图元。
以上只是非常简单的说明,具体的代码中要更复杂,但大体流程如此,如有错误,恳请指正。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-5-4 21:48 , Processed in 0.121523 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.