buffer = 0x001b8478 "试图给目录添加一个名称已在使用中的对象。 这是什么意思

fish_phenix 2011-10-12 11:33:13
我在使用 d3d加载一个 .x文件时,跑到函数D3DXLoadMeshFromX()里出错,我打印的log显示是如标题的错误,谁知道怎么回事啊 (红色是出错的地方)

代码如下:

#include<Windows.h>
#include<d3d9.h>
#include<d3dx9.h>
//#pragma comment(lib,"dxerr.lib")
//#pragma comment(lib,"dxguid.lib")
//#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"winmm.lib")

wchar_t*g_pClassName=L"Transform";
wchar_t*g_pWindowName=L"我的窗口";

LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
D3DMATERIAL9* g_pMaterials;
LPDIRECT3DTEXTURE9* g_pTextures;
LPD3DXMESH g_pMeshTiny=NULL;
DWORD g_dwNumMtrls=0;






struct CUSTOMVERTEX
{
FLOAT _x,_y,_z;
FLOAT _u,_v;
CUSTOMVERTEX(FLOAT x,FLOAT y,FLOAT z,FLOAT u,FLOAT v)
:_x(x),_y(y),_z(z),_u(u),_v(v){}

};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)


HRESULT InitDirect3D(HWND hWnd);
VOID Direct3DRender();
VOID Direct3DCleanup();

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName=g_pClassName;
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW;

if(!RegisterClass(&wndclass))
return 0;

HWND hWnd=CreateWindow(g_pClassName,g_pWindowName,WS_OVERLAPPEDWINDOW,100,100,640,480,NULL,
NULL,wndclass.hInstance,NULL);

InitDirect3D(hWnd);

ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);


MSG msg;

ZeroMemory(&msg,sizeof(msg));

while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{

TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
Direct3DRender();

}

UnregisterClass(g_pClassName,wndclass.hInstance);
return 0;
}



LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_PAINT:
Direct3DRender();
ValidateRect(hWnd,NULL);
break;
case WM_DESTROY:
Direct3DCleanup();
PostQuitMessage(0);
break;
}

return DefWindowProc(hWnd,message,wParam,lParam);
}

HRESULT InitDirect3D(HWND hWnd)
{
LPDIRECT3D9 pD3D=NULL;
pD3D=Direct3DCreate9(D3D_SDK_VERSION);
if(pD3D==NULL) return E_FAIL;
D3DCAPS9 caps;
int vp=0;

pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps);
if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;






D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth=640;
d3dpp.BackBufferHeight=480;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount=1;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality=0;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow=hWnd;
d3dpp.Windowed=true;
d3dpp.EnableAutoDepthStencil=true;
d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3dpp.Flags=0;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,vp,&d3dpp,&g_pd3dDevice);




LPD3DXBUFFER pAdjBuffer=NULL;
LPD3DXBUFFER pMtrlBuffer=NULL;
if(FAILED(D3DXLoadMeshFromX(L"D:\\DwarfWithEffectInstance.x",D3DXMESH_MANAGED,g_pd3dDevice,&pAdjBuffer,&pMtrlBuffer,NULL,&g_dwNumMtrls,&g_pMeshTiny)))
MessageBox(NULL,L"failed",L"failed",0);
// else
// MessageBox(NULL,L"success",L"success",0);



D3DXMATERIAL* pMtrls=(D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();
g_pMaterials=new D3DMATERIAL9[g_dwNumMtrls];
g_pTextures=new LPDIRECT3DTEXTURE9[g_dwNumMtrls];
for(DWORD i=0;i<g_dwNumMtrls;i++)
{
g_pMaterials[i]=pMtrls[i].MatD3D;
g_pMaterials[i].Ambient=g_pMaterials[i].Diffuse;
g_pTextures[i]=NULL;
D3DXCreateTextureFromFileA(g_pd3dDevice,pMtrls[i].pTextureFilename,&g_pTextures[i]);
}
pAdjBuffer->Release();
pMtrlBuffer->Release();



g_pd3dDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
g_pd3dDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);
g_pd3dDevice->SetSamplerState(0,D3DSAMP_MIPFILTER,D3DTEXF_LINEAR);










D3DXMATRIX matView;
D3DXVECTOR3 vEye(0.0f,0.0f,-10.0f);
D3DXVECTOR3 vAt(0.0f,0.0f,0.0f);
D3DXVECTOR3 vUp(0.0f,1.0f,0.0f);
D3DXMatrixLookAtLH(&matView,&vEye,&vAt,&vUp);
g_pd3dDevice->SetTransform(D3DTS_VIEW,&matView);



D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj,D3DX_PI/4.0f,1.0f,1.0f,2000.0f);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION,&matProj);



D3DLIGHT9 light;
::ZeroMemory(&light,sizeof(light));
light.Type=D3DLIGHT_DIRECTIONAL;
light.Ambient=D3DXCOLOR(0.3f,0.3f,0.3f,1.0f);
light.Diffuse=D3DXCOLOR(1.0f,1.0f,1.0f,1.0f);
light.Specular=D3DXCOLOR(0.0f,0.0f,0.0f,1.0f);
light.Position=D3DXVECTOR3(1.0f,0.0f,1.0f);

g_pd3dDevice->SetLight(0,&light);
g_pd3dDevice->LightEnable(0,TRUE);
g_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS,true);
g_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE,true);






pD3D->Release();
return S_OK;
}


VOID Direct3DRender()
{
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
g_pd3dDevice->BeginScene();



D3DXMATRIX matWorld,Rx,Ry,Rz;
D3DXMatrixIdentity(&matWorld);
// D3DXMatrixRotationX(&Rx,-D3DX_PI/2.0f);
D3DXMatrixRotationY(&Ry,D3DX_PI+::timeGetTime()/1000.0f);
matWorld=Ry*matWorld;
g_pd3dDevice->SetTransform(D3DTS_WORLD,&matWorld);


if(::GetAsyncKeyState('F')&0x8000f)
g_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
if(::GetAsyncKeyState('S')&0x8000f)
g_pd3dDevice->SetRenderState(D3DRS_FILLMODE,D3DFILL_SOLID);


for(DWORD i=0;i<g_dwNumMtrls;i++)
{
g_pd3dDevice->SetMaterial(&g_pMaterials[i]);
g_pd3dDevice->SetTexture(0,g_pTextures[i]);
g_pMeshTiny->DrawSubset(i);
}




g_pd3dDevice->EndScene();
g_pd3dDevice->Present(NULL,NULL,NULL,NULL);
}

VOID Direct3DCleanup()
{
if(g_pd3dDevice!=NULL)
{
g_pd3dDevice->Release();
}
g_pd3dDevice=NULL;

}
...全文
301 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish_phenix 2011-10-14
  • 打赏
  • 举报
回复
不知道啊 参数除了第1个是一个 .x文件,其他都是常规的参数啊
fandh 2011-10-13
  • 打赏
  • 举报
回复
D3DXLoadMeshFromX是不是参数有问题?
有没有跟踪调试一下?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧