📄 winmain.cpp
字号:
#include "CGE\HEADERS.H"
#include "CGE\STRUCTS.H"
#include "CGE\DISPLAY.H"
#include "CGE\ARCBALL.H"
#include "CGE\XSKINMESH.H"
USING NAMESPACE CGE;
typedef class SubMember:public DISPLAY::MEMBER
{
public:
SubMember()
{};
virtual ~SubMember()
{
};
virtual BOOL Install() { return TRUE; }
virtual BOOL UnInstall() { return TRUE; }
}*LPSUBMEMBER;
MODEL::XFILE::LPXSKINMESH SkinMesh = NULL;
DISPLAY::LPBEHAVIOR Behavior = NULL;
MATRIX::LPARCBALL Arcball = NULL;
FLOAT CurrentTime,LastUpdateTime;
LPSUBMEMBER Member = NULL;
D3DXMATRIX MatrixLookAt()
{
D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
D3DXMatrixLookAtLH(&mat, &D3DXVECTOR3( 0.0f , 0.0f, -200.0f), &D3DXVECTOR3( 0.0f, 0.0f, 1.0f), &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
return mat;
}
D3DXMATRIX MatrixPerspectiveFov()
{
D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
D3DXMatrixPerspectiveFovLH(&mat,D3DX_PI/4,1.0f,1.0f,5000.0f);
return mat;
}
BOOL MainDrawFrame()
{
LPDIRECT3DDEVICE8 device = Behavior->GetSafeDevice();
LPDIRECT3DVERTEXBUFFER8 vb = Behavior->GetSafeDefaultVertBuffer();
device->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_COLORVALUE(0.0f, 0.0f, 0.0, 1.0f), 1.0f, 0 );
device->BeginScene();
D3DXMATRIX matWorld,matRot,matTrans;
matRot = Arcball->m_matRotation;
matTrans = Arcball->m_matTranslation;
D3DXMatrixIdentity( &matWorld );
D3DXMatrixMultiply( &matWorld, &matWorld, &matRot);
D3DXMatrixMultiply( &matWorld, &matWorld,&matTrans );
device->SetTransform( D3DTS_WORLD,&matWorld);
SkinMesh->AnimationMesh((float)timeGetTime()/1000.0f,matWorld, 48.0f);
SkinMesh->DrawSkinMesh();
device->EndScene();
device->Present(0,0,0,0);
return TRUE;
}
BOOL MainFrameMove()
{
LPDIRECT3DDEVICE8 device = Behavior->GetSafeDevice();
LPDIRECT3DVERTEXBUFFER8 vb = Behavior->GetSafeDefaultVertBuffer();
device->SetTransform(D3DTS_VIEW,&MatrixLookAt());
device->SetTransform(D3DTS_PROJECTION,&MatrixPerspectiveFov());
device->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE);
device->SetRenderState( D3DRS_LIGHTING,FALSE);
device->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
device->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0,D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
device->SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
device->SetTextureStageState(0,D3DTSS_MINFILTER, D3DTEXF_LINEAR);
return TRUE;
}
VOID MainDealMsg()
{
MSG msg;
BOOL fMessage;
PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while(msg.message != WM_QUIT)
{
fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
if(fMessage)
{
//Process message
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
//No message to process, so render the current scene
MainFrameMove();
MainDrawFrame();
}
}
}
//The windows message handler
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);return 0; break;
case WM_MOUSEMOVE:
Arcball->HandleMouseMove(wParam,lParam);break;
case WM_LBUTTONDOWN:
Arcball->HandleMouseKeyDown(wParam,lParam);break;
case WM_KEYUP:
switch (wParam)
{
case VK_ESCAPE:
//User has pressed the escape key, so quit
DestroyWindow(hWnd);
return 0;break;
} break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
BOOL WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
//Register the window class
WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L,
GetModuleHandle(NULL), NULL, LoadCursor( NULL, IDC_SIZEALL ), NULL, NULL,
"CGE", NULL};
RegisterClassEx(&wc);
//Create the application's window
HWND hWnd = CreateWindow("CGE", "XSkinFile",
WS_OVERLAPPED | WS_CAPTION| WS_SYSMENU | WS_MINIMIZEBOX,
50, 50, 500, 500,
GetDesktopWindow(), NULL, wc.hInstance, NULL);
Member = new SubMember;
Behavior = new DISPLAY::BEHAVIOR;
SkinMesh = new MODEL::XFILE::XSKINMESH;
Arcball = new MATRIX::ARCBALL;
if ( !Behavior->BehaviorCreate(Member,hWnd,450,450))
{
SAFE_DELETE(Behavior);
SendMessage(hWnd,WM_CLOSE,0,0);
UnregisterClass("CGE", wc.hInstance);
}
SkinMesh->ReadMeshHierarchy("warrior.x",Behavior->GetSafeDevice(),D3DXMESH_VB_SYSTEMMEM);
SkinMesh->SetAnimationSet("Walk");
Arcball->SetArcBall(450,450);
Arcball->m_fRadiusTranslation = SkinMesh->GetBoundRadius();
LastUpdateTime = timeGetTime();
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MainDealMsg();
SAFE_DELETE(Arcball);
SAFE_DELETE(SkinMesh);
SAFE_DELETE(Behavior);
UnregisterClass("CGE", wc.hInstance);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -