读书人

X文件能够加载但是不能够渲染 有几种可

发布时间: 2012-02-14 19:19:19 作者: rapoo

X文件能够加载但是不能够渲染 有几种可能的问题啊?
只有个白色的透明的物体,这个x文件没有纹理文件,只有材质
一下是自己写的模型类里面的两个函数,真的不知道问题出在哪里。。希望大虾帮忙。。

CXModel的成员表为:
LPDIRECT3DDEVICE9 m_device;
ID3DXMesh* Mesh;
D3DMATERIAL9* Mtrls;//材质数组
LPDIRECT3DTEXTURE9* Textures;//纹理指针数组
DWORD m_numMtrls;//材质数目

C/C++ code
bool CXModel::LoadXFile(char *file){    HRESULT hr = 0;    //加载x文件    ID3DXBuffer* adjBuffer  = 0;//邻接信息    ID3DXBuffer* mtrlBuffer = 0;    DWORD        numMtrls   = 0;    D3DXMATERIAL* mtrls=0;    hr = D3DXLoadMeshFromX(          file,        D3DXMESH_MANAGED,        m_device,        &adjBuffer,        &mtrlBuffer,        0,        &numMtrls,        &Mesh);    m_numMtrls=numMtrls;    if(FAILED(hr))    {        ::MessageBox(0, TEXT("加载x模型失败"), 0, 0);        return false;    }        if( mtrlBuffer != 0 && numMtrls != 0 )//如果材质缓存不为空    {        Mtrls=new D3DMATERIAL9[numMtrls];        Textures=new LPDIRECT3DTEXTURE9[numMtrls];        mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();        for(int i = 0; i < numMtrls; i++)        {                        //mtrls[i].MatD3D.Ambient = mtrls[i].MatD3D.Diffuse;                        Mtrls[i]=mtrls[i].MatD3D ;                        if( mtrls[i].pTextureFilename != 0 )            {                                IDirect3DTexture9* tex = 0;                D3DXCreateTextureFromFile(                    m_device,                    mtrls[i].pTextureFilename,                    &tex);                                Textures[i]= tex ;            }            else            {                                Textures[i]= 0 ;            }        }    }    Release<ID3DXBuffer*>(mtrlBuffer);     //    // Optimize the mesh.    //    hr = Mesh->OptimizeInplace(                D3DXMESHOPT_ATTRSORT |        D3DXMESHOPT_COMPACT  |        D3DXMESHOPT_VERTEXCACHE,        (DWORD*)adjBuffer->GetBufferPointer(),        0, 0, 0);    Release<ID3DXBuffer*>(adjBuffer);    if(FAILED(hr))    {        ::MessageBox(0, TEXT("优化网格失败"), 0, 0);        return false;    }    return true;}void CXModel::Render(CVector3 pos){    CMatrix4x4 mat;    this->GetWorldMatrixFromPos(pos,mat);    m_device->SetTransform(D3DTS_WORLD,(D3DXMATRIX*)(&mat)->matrix);    for(int i = 0; i < m_numMtrls; i++)        {            m_device->SetMaterial( &Mtrls[i] );            m_device->SetTexture(0, Textures[i]);            Mesh->DrawSubset(i);        }    }        


[解决办法]
场景中,透明的物体需要最后渲染。

读书人网 >网络游戏

热点推荐