|
|
大家看一下我的代码,哪里有问题,为什么老是显示不出来啊,调了很久了,连死的心都有了。
#include <d3d9.h>
#include <d3dx9.h>
struct CUSTOMVERTEX
{
float x,y,z;
D3DCOLOR color;
};
#define D3DFVF_CUSTOM (D3DFVF_XYZ|D3DFVF_DIFFUSE)
LPDIRECT3DDEVICE9 m_pD3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9 m_pVB=NULL;
LPDIRECT3D9 m_pD3d=NULL;
HWND hWnd;
bool InitDevice(HWND hwnd)
{
if (NULL==(m_pD3d=Direct3DCreate9(D3D_SDK_VERSION)))
{
MessageBox(NULL,"Direct3DCreate9()---FAILED","Alert",MB_OK);
return false;
}
D3DDISPLAYMODE pm;
if (FAILED(m_pD3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&pm)))
{
MessageBox(NULL,"GetAdapterDisplayMode()---FAILED","Alert",MB_OK);
return false;
}
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp,sizeof(D3DPRESENT_PARAMETERS));
pp.hDeviceWindow=hwnd;
pp.Windowed=true;
pp.BackBufferFormat=pm.Format;
pp.BackBufferCount=1;
pp.BackBufferHeight=600;
pp.BackBufferWidth=800;
pp.EnableAutoDepthStencil=true;
pp.AutoDepthStencilFormat=D3DFMT_D24S8;
pp.SwapEffect=D3DSWAPEFFECT_FLIP;
pp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
pp.MultiSampleQuality=0;
if (FAILED(m_pD3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&pp,&m_pD3dDevice)))
{
MessageBox(NULL,"CreateDevice()---FAILED","Alert",MB_OK);
return false;
}
return true;
}
bool InitDot()
{
if (FAILED(m_pD3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0,D3DFVF_CUSTOM,D3DPOOL_DEFAULT,&m_pVB,NULL)))
{
MessageBox(NULL,"CreateVertexBuffer()---FAILED","Alert",MB_OK);
return false;
}
CUSTOMVERTEX Vertices[]={{-10.0f,-10.0f,1.0f,D3DCOLOR_XRGB(255,0,0)},
{ 0.0f,10.0f,1.0f,D3DCOLOR_XRGB(0,0,255)},
{10.0f,-10.0f,1.0f,D3DCOLOR_XRGB(0,255,0)}};
void *pVertices;
if (FAILED(m_pVB->Lock(0,3*sizeof(CUSTOMVERTEX),(void**)&pVertices,0)))
{
MessageBox(NULL,"Lock()---FAILED","Alert",MB_OK);
return false;
}
memcpy(pVertices,Vertices,sizeof(Vertices));
m_pVB->Unlock();
return true;
}
void SetCamera()
{
D3DXMATRIX matWorld,matView,matProj;
D3DXMatrixIdentity( &matWorld ); //单位化矩阵
m_pD3dDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXMatrixLookAtLH( &matView,&D3DXVECTOR3( 0.0f, 0.0f,-3.0f),&D3DXVECTOR3( 0.0f, 0.0f,0.0f ),&D3DXVECTOR3( 0.0f, 1.0f,0.0f ) );
m_pD3dDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/3, 1.0f, 0.0f, 100.0f );
m_pD3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}
void Render()
{
m_pD3dDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0,0);
m_pD3dDevice->BeginScene();
SetCamera();
m_pD3dDevice->SetStreamSource(0,m_pVB,sizeof(CUSTOMVERTEX),0);
m_pD3dDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
m_pD3dDevice->SetRenderState(D3DRS_LIGHTING,false);
m_pD3dDevice->SetFVF(D3DFVF_CUSTOM);
m_pD3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,1);
m_pD3dDevice->EndScene();
m_pD3dDevice-> resent(NULL,NULL,NULL,NULL);
}
void ClearUp()
{
if (m_pD3d!=NULL)
m_pD3d->Release();
if (m_pD3dDevice!=NULL)
m_pD3dDevice->Release();
if (m_pVB!=NULL)
m_pVB->Release();
}
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
WNDCLASSEX wndclass={sizeof(WNDCLASSEX),CS_CLASSDC,WinProc,0,0,GetModuleHandle (NULL),NULL,NULL,NULL,NULL,"SoftStar",NULL};
RegisterClassEx(&wndclass);
hWnd=CreateWindow("SoftStar","SoftStar",WS_OVERLAPPEDWINDOW,0,0,800,600,
GetDesktopWindow(),NULL,wndclass.hInstance,NULL);
if (SUCCEEDED(InitDevice(hWnd)))
{
if (SUCCEEDED(InitDot()))
{
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while (msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0U,0U,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
Render();
}
}
}
ClearUp();
UnregisterClass("SoftStar",wndclass.hInstance);
return 0;
}
各位大虾,多谢了! |
|