|
|
bool DoInit()
{
D3DDISPLAYMODE d3ddm;
D3DPRESENT_PARAMETERS d3dpp;
ID3DXBuffer *pD3DXMaterials;
DWORD dwNumMaterials;
D3DXMATERIAL *pMaterials=NULL;
D3DMATERIAL9 *pMaterialList=NULL;
IDirect3DTexture9 *pTextureList=NULL;
g_pD3D=Direct3DCreate9(D3D_SDK_VERSION);
//获得Direct3D接口
if(g_pD3D==NULL)
{
MessageBox(NULL,"error","D3D_CREATE",MB_OK);
return false;
}
//选择显示模式
if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
{
MessageBox(NULL,"error","GET_DISPLAY_MODE",MB_OK);
return false;
}
//设置显示方式
ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));//清空结构体
d3dpp.Windowed=true;
d3dpp.SwapEffect=D3DSWAPEFFECT_FLIP;
d3dpp.BackBufferFormat=d3ddm.Format;
d3dpp.BackBufferWidth=Window_Width;
d3dpp.BackBufferHeight=Window_Height;
//创建设备接口并初始化设备接口
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,g_hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice)))
{
MessageBox(NULL,"error","D3DDevice",MB_OK);
return false;
}
//加载网格模型
if(FAILED(D3DXLoadMeshFromX("Warrior.x",D3DXMESH_SYSTEMMEM,g_pD3DDevice,NULL,&pD3DXMaterials,NULL,&dwNumMaterials,&g_pD3DXMesh)))
{
MessageBox(NULL,"error","LoadMesh",MB_OK);
return false;
}
//查询材质和纹理映射的信息
pMaterials=(D3DXMATERIAL*)pD3DXMaterials->GetBufferPointer();
if(pMaterials!=NULL)
{
//分配一些材质去拷贝数据
pMaterialList=new D3DMATERIAL9[dwNumMaterials];
//分配一些纹理对象指针的数组
pTextureList=new IDirect3DTexture9[dwNumMaterials];
//拷贝所有的材质
for(DWORD i=0;i<dwNumMaterials;i++)
{
pMaterialList=pMaterials.MatD3D;
//将环境色与漫反射色设置一样
pMaterialList.Ambient=pMaterialList.Diffuse;
//创建并加载纹理
if(FAILED(D3DXCreateTextureFromFileA(g_pD3DDevice,pMaterials.pTextureFilename,&pTextureList)))
{
MessageBox(NULL,"error","load Texture",MB_OK);
return false;
}
//释放用于加载材质的缓冲区
pD3DXMaterials->Release();
}
}
else
{
//如果没有材质被加载的话,创建一个默认的材质
dwNumMaterials=1;
//创建一个白色的材质
pMaterialList=new D3DMATERIAL9[1];
pMaterialList[0].Diffuse.r=1.0f;
pMaterialList[0].Diffuse.g=1.0f;
pMaterialList[0].Diffuse.b=1.0f;
pMaterialList[0].Diffuse.a=1.0f;
//创建一个空的纹理引用
pTextureList=new IDirect3DTexture9[1];
pTextureList[0]=NULL;
}
return 1;
}
此楼是初始化的函数
具体问题是pTextureList=new IDirect3DTexture9[1]报错
////////////////////////////////////////////////////////////////////////////////
c:\program files\microsoft directx sdk (april 2006)\include\d3d9.h(1116) : see declaration of 'IDirect3DTexture9::AddDirtyRect'
c:\documents and settings\administrator\my documents\visual studio 2005\projects\directx_dotx\directx_dotx\main.cpp(181) : error C2664: 'D3DXCreateTextureFromFileA' : cannot convert parameter 3 from 'IDirect3DTexture9 *__w64 ' to 'LPDIRECT3DTEXTURE9 *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\documents and settings\administrator\my documents\visual studio 2005\projects\directx_dotx\directx_dotx\main.cpp(205) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
c:\program files\microsoft directx sdk (april 2006)\include\d3d9.h(1132): could be 'IDirect3DTexture9 &IDirect3DTexture9: perator =(const IDirect3DTexture9 &)'
while trying to match the argument list '(IDirect3DTexture9, int)'
/*******************************************************************
pTextureList不能new,但是pMaterialList却可以new,明明是一样的东西啊.......
完全的代码在附件里面,请一定要帮帮我这个菜鸟啊..........
|
|