|
我的替换思路是。。。加载要替换的纹理贴图如何根据需要替换但是不知道会不会造成内存泄露!基本代码如下:
LPDIRECT3DTEXTURE9 ppTextures1;
LPDIRECT3DTEXTURE9 ppTextures2;
LPDIRECT3DTEXTURE9 ppTextures3;
if( FAILED( D3DXCreateTextureFromFileA( m_pd3dDevice,"GameData//Data5//X2.bmp",&ppTextures1)))
{
return false;
}
if( FAILED( D3DXCreateTextureFromFileA( m_pd3dDevice,"GameData//Data5//X3.bmp",&ppTextures2)))
{
return false;
}
if( FAILED( D3DXCreateTextureFromFileA( m_pd3dDevice,"GameData//Data5//X4.bmp",&ppTextures3)))
{
return false;
}
//=================替换贴图如下:
//选择要替换的模型的地方
if (m_modelidstacit==m_needchangID)
{
UINT iMaterial=0;//材质
//如果是加入的读好的纹理
if (m_Special)
{
for (iMaterial = 0; iMaterial < pMeshContainer->NumMaterials; iMaterial++)
{
if (pMeshContainer->ppTextures[iMaterial]!=NULL)
{
pMeshContainer->ppTextures=NULL;
}
switch(mapId)
{
case 0:
pMeshContainer->ppTextures=&ppTextures1;
break;
case 1:
pMeshContainer->ppTextures=&ppTextures2;
break;
case 2:
pMeshContainer->ppTextures=&ppTextures3;
break;//=====================
default:
break;
}
}
mapId=-1;
m_Special=false;
}
else//如果是临时加入的纹理
{
for (iMaterial = 0; iMaterial < pMeshContainer->NumMaterials; iMaterial++)
{
if (pMeshContainer->ppTextures[iMaterial]!=NULL)
{
pMeshContainer->ppTextures[iMaterial]->Release();
pMeshContainer->ppTextures[iMaterial]=NULL;
}
if( FAILED( D3DXCreateTextureFromFileA( m_pd3dDevice,
m_strFileName,
&pMeshContainer->ppTextures[iMaterial])))
{
}
}
}
m_modelidstacit=100;
}
m_modelidstacit++;
if (m_modelidstacit>100)
{
m_modelidstacit=100;
}
m_pd3dDevice->SetTransform(D3DTS_WORLD, &pFrame->CombinedTransformationMatrix);
if (pMeshContainer->ppTextures!=NULL)
{
for (iMaterial = 0; iMaterial < pMeshContainer->NumMaterials; iMaterial++)
{
m_pd3dDevice->SetMaterial( &pMeshContainer->pMaterials[iMaterial].MatD3D );
m_pd3dDevice->SetTexture( 0, pMeshContainer->ppTextures[iMaterial] );
pMeshContainer->MeshData.pMesh->DrawSubset(iMaterial);
}
}
}pMeshContainer->ppTextures=&ppTextures1;
如有处理个这方面的朋友,希望能给予点经验!谢谢 |
|