[转帖]Half Life2 引擎渲染系统浅析
<table cellspacing="0" cellpadding="0" width="100%" align="left"><tbody><tr><td class="f" valign="top" width="100%"><table cellspacing="0" cellpadding="2" width="100%"><tbody><tr><td valign="bottom" align="left"><span class="txt5"><b>Half Life2 引擎渲染系统浅析</b><br/></span></td><td class="txt4" valign="top" nowrap="nowrap" align="right"><a href="javascript:__doPostBack('_ctl0$MainContent$PostFlatView$_ctl0$PostRepeater$_ctl0$_ctl12','')"></a> </td></tr></tbody></table></td></tr><!--Element not supported - Type: 8 Name: #comment--><!--Element not supported - Type: 8 Name: #comment--><tr><td class="fh3a" valign="top" height="100"><table cellspacing="2" cellpadding="0" width="100%" align="left" border="0"><tbody><tr><td width="1" rowspan="1"><img height="250" src="http://bbs.gamedev.csdn.net/Web/Themes/default/images/spacer.gif" width="1" alt=""/></td><td class="txt4" valign="top" style="PADDING-TOP: 4px;"><table cellspacing="0" cellpadding="4" width="90%" align="left"><tbody><tr><td class="txt4" valign="top" align="left">一、 绘制 Mesh 流程:<br/>涉及类及接口:<br/>1. CMeshDX8:<br/>继承关系:CMeshDX8->CBaseMeshDX8->IMeshDX8->Imesh<br/>所在工程:\materialsystem\shaderdx8\shaderdx8.dsp<br/>说明:Imesh 存在于 MaterialSystem 工程中<br/>IMesh 中有两个 Draw 方法:<br/>virtual void Draw( int firstIndex = -1, int numIndices = 0 ) = 0; 用于一般绘制<br/> virtual void Draw( CPrimList *pLists, int nLists ) = 0; 用于批量绘制的(只适用于静态Mesh)<br/>2. CShaderAPIDX8<br/>继承关系:CShaderAPIDX8-> IShaderAPIDX8-> IShaderAPI-> IShaderDynamicAPI<br/>所在工程:\materialsystem\shaderdx8\shaderdx8.dsp<br/>说明:顾名思义这是 d3dapi的封装,需要说明一点的是 hl2 使用宏来决定使用的是 d3d9 还是 d3d8 api,尽管这个工程名为 dx8, 这里使用的是dx9,.<br/>3. CMaterial<br/>继承关系:CMaterial -> IMaterialInternal -> IMaterial <br/>所在工程:\materialsystem\ materialsystem.dsp<br/>说明:绘制物体的属性的容器,包括渲染状态、使用纹理、着色器。<br/>4. CShaderSystem<br/>继承关系:CShaderSystem-> IShaderSystemInternal-> IShaderInit, IShaderSystem<br/>所在工程:\materialsystem\ materialsystem.dsp<br/>说明:负责引擎的着色控制,管理着色动态链接库,管理渲染状态设置等。<br/>5.各种着色器实现类<br/>继承关系:着色器实现类-> CBaseShader-> IShader<br/>所在工程:\materialsystem\stdshaders\stdshader_*.dsp <br/>说明:实现不同的物体着色方式。<br/>具体流程:<br/> CmeshDX8::Draw()<br/>->CbaseMeshDX8::DrawMesh()<br/>->IShaderAPI::DrawMesh()<br/>->Imaterial::DrawMesh()<br/>->IshaderSystem::DrawElements()<br/>->Ishader::DrawElements()<br/>->着色器实现类::OnDrawElements()<br/>-> CBaseShader::Draw( )<br/>->IshaderSystem::DrawSnapshot()<br/> ->IshaderAPI::RenderPass()<br/> ->ImeshDX8::RenderPass()<br/> ->调用 DIP<br/>如有纰漏,恳请赐教。</td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table>
页:
[1]