游戏开发论坛

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

Half Life2 引擎渲染系统浅析(1)(原创)

[复制链接]

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-2-28 10:34:00 | 显示全部楼层 |阅读模式
一、 绘制 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:raw()
->CbaseMeshDX8::DrawMesh()
->IShaderAPI::DrawMesh()
->Imaterial::DrawMesh()
->IshaderSystem::DrawElements()
->Ishader::DrawElements()
->着色器实现类::OnDrawElements()
-> CBaseShader::Draw( )
->IshaderSystem::DrawSnapshot()
    ->IshaderAPI::RenderPass()
    ->ImeshDX8::RenderPass()
    ->调用 DIP
如有纰漏,恳请赐教。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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