游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1667|回复: 1

骨骼动画纹理贴图替换问题

[复制链接]

10

主题

15

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2010-9-9 17:48:00 | 显示全部楼层 |阅读模式
我的替换思路是。。。加载要替换的纹理贴图如何根据需要替换但是不知道会不会造成内存泄露!基本代码如下:
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;


如有处理个这方面的朋友,希望能给予点经验!谢谢

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-9-17 01:36:00 | 显示全部楼层

Re:骨骼动画纹理贴图替换问题

如果用hlsl,这不是非常简单吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-6 14:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表