游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1234|回复: 0

浅析 Quake3 渲染流程(原创)

[复制链接]

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-2-28 10:33:00 | 显示全部楼层 |阅读模式
为了研究 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在每次渲染前将待渲染图元的顶点数据送入到缓冲区中,并设置相应的顶点索引,由于每个渲染表面的顶点索引是局部索引,所以很容易与其它表面合并为一个索引缓冲区,这样就可以批量绘制同一渲染状态的图元。

以上只是非常简单的说明,具体的代码中要更复杂,但大体流程如此,如有错误,恳请指正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 17:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表