当前位置:编程学习 > C#/ASP.NET >>

VS2005上画个三角形出问题啦,请高手帮帮!!!!!

这条代码是显示一个三角形的代码,可以编译,但运行时卡住了,请高手们帮帮!!
这段代码是从<游戏开发技术VC.net>抄下来的,配置根据书上要求做的,但出问题啦???
现在还在自学中,请那位无私奉献高手帮帮,O(∩_∩)O谢谢
#include<d3d9.h>

LPDIRECT3D9 g_pD3d=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pd3dDevicebuffer=NULL;

struct CUSTOMVERTEX
{
FLOAT x,y,z,rhm;
DWORD colour;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
#define SafeRelease(pObject)  if(pObject!=NULL) {pObject->Release();  pObject=NULL;}

HRESULT InitialiseD3D(HWND hWnd)
{
g_pD3d=Direct3DCreate9(D3D_SDK_VERSION);
if (g_pD3d==NULL)
{
return E_FAIL;
}


D3DDISPLAYMODE d3ddm;

if (FAILED(g_pD3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
{
return E_FAIL;
}

D3DPRESENT_PARAMETERS d3易做图;
ZeroMemory(&d3易做图,sizeof(d3易做图));

d3易做图.Windowed=TRUE;
d3易做图.SwapEffect=D3DSWAPEFFECT_COPY;
d3易做图.BackBufferFormat=d3ddm.Format;

if (FAILED(g_pD3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3易做图,&g_pd3dDevice)))
{
return E_FAIL;
}

return S_OK;
}

HRESULT Intitaverbufer()
{
VOID *pvertices;
CUSTOMVERTEX CVER[]={
{250.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0),},
{400.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0),},
{100.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255),},
};


if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pd3dDevicebuffer,NULL)))
{
return E_FAIL;
}

if (FAILED(g_pd3dDevicebuffer->Lock(0,sizeof(CVER),(void * *)&pvertices,0)))
{
return E_FAIL;
}

memcpy(pvertices,CVER,sizeof(CVER));

g_pd3dDevicebuffer->Unlock();

return S_OK;
}

void Render()
{
if(NULL==g_pd3dDevice)
return;

g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);


g_pd3dDevice->BeginScene();

g_pd3dDevice->SetStreamSource(0,g_pd3dDevicebuffer,0,sizeof(CUSTOMVERTEX));
g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);


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

}
void Cleanup()
{
SafeRelease(g_pd3dDevicebuffer);
SafeRelease(g_pd3dDevice);
SafeRelease(g_pD3d);

}
void GameLoop()
{
MSG msg;
BOOL fMessage;

PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);

while (msg.message!=WM_QUIT)
{
fMessage=PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);

if (fMessage)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
}


LRESULT WINAPI MsgPro(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
break;
case WM_PAINT:
switch(wParam)
{
case VK_ESCAPE:
  DestroyWindow(hWnd);
  return 0;
break;
}
break;
}
return DefWindowProc(hWnd,msg,wParam,lParam);
}

INT WINAPI WinMain(HINSTANCE hinstance,HINSTANCE ,LPSTR ,INT)
{
WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgPro,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,"dx Project 2",NULL};

RegisterClassEx(&wc);

HWND hWnd=CreateWindow("dx Project 2","第一个3D项目",WS_OVERLAPPEDWINDOW,50,50,500,500,GetDesktopWindow(),NULL,wc.hInstance,NULL);


if (SUCCEEDED(InitialiseD3D(hWnd)))
{
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);


if (SUCCEEDED(Intitaverbufer()))
{
GameLoop();
}


}
Cleanup();

UnregisterClass("dx Project 2",wc.hInstance);
return 0;
} --------------------编程问答-------------------- 没画过。
    画画技术很不好。
呵呵!!! --------------------编程问答-------------------- 不是画画,是代码来的,能帮我看看行不 --------------------编程问答-------------------- 在线等,那位高手帮帮忙,谢谢 --------------------编程问答-------------------- 应该先Debug调试一下,看程序出问题的地方 --------------------编程问答-------------------- up
补充:.NET技术 ,  VC.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,