前腐后继 发表于 2006-12-18 19:13:00

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