|
我有一个高达的模型(包含贴图,骨骼动画)
我通过如下代码导入:
HRESULT hr = 0;
//
// Load the XFile data.
//
ID3DXBuffer* adjBuffer = 0;
ID3DXBuffer* mtrlBuffer = 0;
DWORD numMtrls = 0;
hr = D3DXLoadMeshFromX(
"..\\new3dproj\\gundam1\\1.X",
D3DXMESH_MANAGED,
Device,
&adjBuffer,
&mtrlBuffer,
0,
&numMtrls,
&Mesh);
if(FAILED(hr))
{
::MessageBox(0, "D3DXLoadMeshFromX() - FAILED", 0, 0);
return false;
}
//
// Extract the materials, and load textures.
//
if( mtrlBuffer != 0 && numMtrls != 0 )
{
D3DXMATERIAL* mtrls = (D3DXMATERIAL*)mtrlBuffer->GetBufferPointer();
for(int i = 0; i < numMtrls; i++)
{
mtrls.MatD3D.Ambient = mtrls.MatD3D.Diffuse;
Mtrls.push_back( mtrls.MatD3D );
if( mtrls.pTextureFilename != 0 )
{
IDirect3DTexture9* tex = 0;
D3DXCreateTextureFromFile(
Device,
mtrls.pTextureFilename,
&tex);
Textures.push_back( tex );
}
else
{
Textures.push_back( 0 );
}
}
}
d3d::Release<ID3DXBuffer*>(mtrlBuffer);
hr = Mesh->OptimizeInplace(
D3DXMESHOPT_ATTRSORT |
D3DXMESHOPT_COMPACT |
D3DXMESHOPT_VERTEXCACHE,
(DWORD*)adjBuffer->GetBufferPointer(),
0, 0, 0);
d3d::Release<ID3DXBuffer*>(adjBuffer); // done w/ buffer
if(FAILED(hr))
{
::MessageBox(0, "OptimizeInplace() - FAILED", 0, 0);
return false;
}
Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
以上是模型导入和材质,贴图设置的
然后灯光代码如下:
D3DXVECTOR3 dir(1.0f, -0.0f, 0.25f);
D3DXCOLOR c = d3d::WHITE;//(这个是例子定义的的XRGB格式)
D3DLIGHT9 dirLight = d3d::InitDirectionalLight(&dir, &c);
//
// Set and Enable the light.
//
Device->SetLight(0, &dirLight);
Device->LightEnable(0,true);
//
// Set lighting related render states.
//
Device->SetRenderState(D3DRS_NORMALIZENORMALS, true);
Device->SetRenderState(D3DRS_SPECULARENABLE, false);
最后是渲染部分:(BIGEN SCENE什么的不贴了)
for(int i = 0; i < Mtrls.size(); i++)
{
Device->SetMaterial( &Mtrls );
Device->SetTexture(0, Textures);
Mesh->DrawSubset(i);
}
求问为何会出现贴图不显示,模型身上大部分贴图只会根据光源颜色而改变的情况呢?]
另外,当模型成功读取到贴图以后,内存使用量异常(33MB左右的模型文件,消耗内存超过500MB,并且帧数非常低),请问是我贴图读取时造成内存泄露了还是模型文件本身问题?
(本人新手,请各位赐教,感激不尽)
|
|