|
#include<d3d9.h>
const TCHAR g_pClassName[]="HelloDirect3D";
const TCHAR g_pWindowName[]="Direct3D示例";
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;//Direct3D接口设备
HRESULT InitDirect3D(HWND hWnd);//初始化Direct3D
VOID Direct3DRender();//渲染图形
VOID Direct3DCleanup();//清理Direct3D资源
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口消息处理函数声明
//应用程序入口函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
/*初始化窗口类*/
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)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);
/*初始化Direct3D*/
InitDirect3D(hWnd);
/*显示窗口,更新窗口*/
ShowWindow(hWnd,nCmdShow);
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();//绘制3D场景
}
}
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();//清理Direct3D
PostQuitMessage(0);//退出程序
break;
}
//默认消息处理
return DefWindowProc(hWnd,message,wParam,lParam);
}
/*初始化Direct3D*/
HRESULT InitDirect3D(HWND hWnd)
{
/*创建IDirect3D接口*/
LPDIRECT3D9 pD3D=NULL;//IDirect3D接口
pD3D=Direct3DCreate9(D3D_SDK_VERSION);//创建IDirect3D9接口对象
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;
/*创建Direct3D接口设备*/
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);
pD3D->Release();//释放Direct3D接口
return S_OK;
}
/*绘制3D场景*/
VOID Direct3DRender()
{
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
g_pd3dDevice->BeginScene();//开始绘制
/*图形实际绘制过程*/
g_pd3dDevice->EndScene();//结束绘制
g_pd3dDevice-> resent(NULL,NULL,NULL,NULL);//翻转
}
/*清理Direct3D,并释放COM接口*/
VOID Direct3DCleanup()
{
if(g_pd3dDevice!=NULL)
g_pd3dDevice->Release();
g_pd3dDevice=NULL;
}
以上是源代码,然后编译无误,运行出错:

求哪位编译一下指出问题,大神们快来啊
|
|