⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winmain.cpp

📁 VC++ DEMO, used for the beginners and the amour
💻 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 + -