浅析 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位整数,这会大大加快图元排序。排序使用二分算法,在msqsort上作了修改。

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

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

Advertisements
此条目发表在3D图形分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s