|
|

楼主 |
发表于 2006-4-11 17:31:00
|
显示全部楼层
Re: 关于HLSL中 uniform 的问题
//globel.h-----------------------------------------------
//这是几个全局变量
D3DXHANDLE g_hTechnique_body;
D3DXHANDLE g_hTechnique_weiqi;
D3DXHANDLE .......
D3DXHANDLE g_hTechnique[] = { g_hTechnique_body,
g_hTechnique_weiqi,
......};
//main.cpp-----------------------------------------------
//下面这些在初始化D3D时调用,获得每个句柄
g_hTechnique_body = g_pEffect->GetTechniqueByName("Render_body");
g_hTechnique_weiqi = g_pEffect->GetTechniqueByName("Render_weiqi");
.......
//在Render里调用Fish类的RenderFish方法,将g_hTechnique作为参数传入
//然后Fish类的RenderFish调用RenderFrame,同时将g_hTechnique和g_pEffect作为参数传入
g_fish->RenderFish(g_pEffect, g_hWorld, g_hTransformation, g_hTechnique, g_hMotion, nFrequency, g_hPart);
//Fish.cpp-----------------------------------------------
//RenderFrame函数里进行判断
- if( 0 == strcmp(pFishFrame->Name, "body") )
- {
- pEffect->SetTechnique(hTechnique[0]);
- }
- else if( 0 == strcmp(pFishFrame->Name, "weiqi") )
- {
- pEffect->SetTechnique(hTechnique[1]);
- }
- else if( ...)
- {
- .......
- }
- pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW);
- pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE);
- pEffect->SetMatrix(hWorld, &matTransWorld);
- /////////////////////////////////////// with effect ////////////////////////////
- UINT nPasses, iPass;
- pEffect->Begin(&nPasses, 0);
- for( iPass = 0; iPass < nPasses; iPass++)
- {
- pEffect->Pass(iPass);
- //give the materials
- for(DWORD i = 0; i < pMeshCtnr->NumMaterials; i++)
- {
- m_pD3DDevice->SetMaterial(&pMeshCtnr->pMaterials[i].MatD3D);
- m_pD3DDevice->SetTexture(0, pMeshCtnr->ppTextures[i]);
- pMeshCtnr->MeshData.pMesh->DrawSubset(i);
- }//for end
- }
- pEffect->End();
复制代码 |
|