[转帖]Half Life2 引擎渲染系统浅析 

2006-12-18 19:13 发布

2501 0 0
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
如有纰漏,恳请赐教。
B Color Smilies

你可能喜欢

[转帖]Half Life2 引擎渲染系统浅析 
联系
我们
快速回复 返回顶部 返回列表