人气 230

[游戏程序] [转帖]Half Life2 引擎渲染系统浅析 [复制链接]

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

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

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

x
Half Life2 引擎渲染系统浅析
  
一、 绘制 Mesh 流程:
涉及类及接口:
1. CMeshDX8:
继承关系:CMeshDX8->CBaseMeshDX8->IMeshDX8->Imesh
所在工程:\materialsystem\shaderdx8\shaderdx8.dsp
说明:Imesh 存在于 MaterialSystem 工程中
IMesh 中有两个 Draw 方法:
virtual void Draw( int firstIndex = -1, int numIndices = 0 ) = 0; 用于一般绘制
virtual void Draw( CPrimList *pLists, int nLists ) = 0; 用于批量绘制的(只适用于静态Mesh)
2. CShaderAPIDX8
继承关系:CShaderAPIDX8-> IShaderAPIDX8-> IShaderAPI-> IShaderDynamicAPI
所在工程:\materialsystem\shaderdx8\shaderdx8.dsp
说明:顾名思义这是 d3dapi的封装,需要说明一点的是 hl2 使用宏来决定使用的是 d3d9 还是 d3d8 api,尽管这个工程名为 dx8, 这里使用的是dx9,.
3. CMaterial
继承关系:CMaterial -> IMaterialInternal -> IMaterial
所在工程:\materialsystem\ materialsystem.dsp
说明:绘制物体的属性的容器,包括渲染状态、使用纹理、着色器。
4. CShaderSystem
继承关系:CShaderSystem-> IShaderSystemInternal-> IShaderInit, IShaderSystem
所在工程:\materialsystem\ materialsystem.dsp
说明:负责引擎的着色控制,管理着色动态链接库,管理渲染状态设置等。
5.各种着色器实现类
继承关系:着色器实现类-> CBaseShader-> IShader
所在工程:\materialsystem\stdshaders\stdshader_*.dsp
说明:实现不同的物体着色方式。
具体流程:
CmeshDX8::Draw()
->CbaseMeshDX8::DrawMesh()
->IShaderAPI::DrawMesh()
->Imaterial::DrawMesh()
->IshaderSystem::DrawElements()
->Ishader::DrawElements()
->着色器实现类::OnDrawElements()
-> CBaseShader::Draw( )
->IshaderSystem::DrawSnapshot()
    ->IshaderAPI::RenderPass()
    ->ImeshDX8::RenderPass()
    ->调用 DIP
如有纰漏,恳请赐教。
回复

使用道具 举报

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

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

GMT+8, 2024-4-24 06:12 , Processed in 0.067815 second(s), 23 queries .

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