亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainfrm.cpp

?? CEGUI是用來做3D游戲UI界面開發的底層接口庫
?? CPP
字號:
// MainFrm.cpp : CMainFrame 類的實現
//

#include "stdafx.h"
#include "MFCD3D.h"
#include "MainFrm.h"
#include <CEGUI.h>
#include <CEGUIDefaultResourceProvider.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
	ON_WM_SETFOCUS()
	ON_WM_DESTROY()
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()


// CMainFrame 構造/析構

CMainFrame::CMainFrame()
: m_d3dDevice(NULL) , 
  m_pCEGUIRender(NULL) ,
  m_pMesh(NULL) , 
  m_pMeshMaterials(NULL) ,
  m_pText(NULL)
{
	m_rotateY = 0.0f;
}

CMainFrame::~CMainFrame()
{
}


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	// 創建一個視圖以占用框架的工作區
	if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
		CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
	{
		TRACE0("未能創建視圖窗口\n");
		return -1;
	}
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("未能創建工具欄\n");
		return -1;      // 未能創建
	}
	// TODO: 如果不需要工具欄可停靠,則刪除這三行
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: 在此處通過修改 CREATESTRUCT cs 來修改窗口類或
	// 樣式

	cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE
		 | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;

	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	cs.lpszClass = AfxRegisterWndClass(0);
	return TRUE;
}


// CMainFrame 診斷

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG


// CMainFrame 消息處理程序

void CMainFrame::OnSetFocus(CWnd* /*pOldWnd*/)
{
	// 將焦點前移到視圖窗口
	m_wndView.SetFocus();
}

BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
	// 讓視圖第一次嘗試該命令
	if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
		return TRUE;

	// 否則,執行默認處理
	return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

// 渲染
void CMainFrame::Render(float timeDelta)
{
	if(m_d3dDevice) // Only use Device methods if we have a valid device.
	{
		//
		// Draw the Scene:
		//
		m_d3dDevice->BeginScene();
		m_d3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(50 , 0 , 50) , 1.0f, 0);
            /// Render Meshs
            DrawMesh();
			/// Render CEGUI
			CEGUI::System::getSingleton().renderGUI();

		m_d3dDevice->EndScene();
		m_d3dDevice->Present(0, 0, 0, 0);
	}
}

void CMainFrame::DrawMesh()
{
	D3DXMATRIX objMat , matRotate , finalMat;
	
	D3DXMatrixIdentity(&objMat);
	D3DXMatrixRotationY(&matRotate , m_rotateY);
	D3DXMatrixMultiply(&finalMat , &objMat , &matRotate);


	m_d3dDevice->SetTransform(D3DTS_WORLD , &finalMat);
    m_d3dDevice->SetTexture(0 , m_pText);
	m_d3dDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
	m_d3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
	m_d3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);


    for(DWORD i = 0; i < m_dwNumMaterials;++i)
    {
        m_d3dDevice->SetMaterial(&m_pMeshMaterials[i]);
        m_pMesh->DrawSubset(i);
    }
}

// 初始化D3D
BOOL CMainFrame::InitD3D(void)
{
	ASSERT(IsWindow(m_wndView.m_hWnd));
	// 初始化Direct3D9
	// Step1.獲得IDirect3D9接口
	IDirect3D9* _d3d9;
	_d3d9 = Direct3DCreate9(D3D_SDK_VERSION);
	if(!_d3d9)
	{
		::AfxMessageBox(_T("Get Interface of Direct3D Failed!") , MB_ICONSTOP);
		return FALSE;
	}
	// Step2.檢查顯卡能力
	D3DCAPS9 caps;
	_d3d9->GetDeviceCaps(D3DADAPTER_DEFAULT ,
		D3DDEVTYPE_HAL ,
		&caps);
	int vp = 0;
	if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
	else
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
	// Step3.填充D3DPRESENT_PARAMETERS
	D3DPRESENT_PARAMETERS d3dpp;
	CRect rect;
	GetClientRect(&rect);
	ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
	d3dpp.BackBufferWidth            = rect.Width();
	d3dpp.BackBufferHeight           = rect.Height();
	d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;
	d3dpp.BackBufferCount            = 1;
	d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;
	d3dpp.MultiSampleQuality         = 0;
	d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; 
	d3dpp.hDeviceWindow              = m_wndView.m_hWnd;
	d3dpp.Windowed                   = true;		// 一定要為true
	d3dpp.EnableAutoDepthStencil     = true; 
	d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;
	d3dpp.Flags                      = 0;
	d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
	d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;

	// Step4.創建Direct3D設備
	HRESULT hr;
	hr = _d3d9->CreateDevice(D3DADAPTER_DEFAULT ,
		D3DDEVTYPE_HAL ,
		m_wndView.m_hWnd ,
		vp ,
		&d3dpp ,
		&m_d3dDevice);
	if(FAILED(hr))
	{
		switch(hr)
		{
		case D3DERR_DEVICELOST:
			AfxMessageBox(_T("Create D3D Device Failed!<Error:D3DERR_DEVICELOST>") , MB_ICONSTOP);
			break;
		case D3DERR_INVALIDCALL:
			AfxMessageBox(_T("Create D3D Device Failed!<Error:D3DERR_INVALIDCALL>") , MB_ICONSTOP);
			break;
		case D3DERR_NOTAVAILABLE:
			AfxMessageBox(_T("Create D3D Device Failed!<Error:D3DERR_NOTAVAILABLE>") , MB_ICONSTOP);
			break;
		case D3DERR_OUTOFVIDEOMEMORY:
			AfxMessageBox(_T("Create D3D Device Failed!<Error:D3DERR_OUTOFVIDEOMEMORY>") , MB_ICONSTOP);
			break;
		}
		_d3d9->Release();
		return FALSE;
	}
	_d3d9->Release();
	// Direct3D9初始化完成
	// 裝載資源
	Setup();
	return TRUE;
}
// 清除資源
void CMainFrame::CleanUp(void)
{
    SAFE_DELETE_ARRAY(m_pMeshMaterials)
}

// 裝載資源
BOOL CMainFrame::Setup(void)
{
    if(!SetupModel())
        return FALSE;
    if(!SetupGUI())
        return FALSE;

	return TRUE;
}

BOOL CMainFrame::SetupModel()
{
    LPD3DXBUFFER ppAdjacencyBuffer;
    LPD3DXBUFFER pD3DXMtrlBuffer;
    HRESULT hr;
    
    /// 加載Mesh
    hr = D3DXLoadMeshFromX("../meshs/EvilDrone.x" , 
        D3DXMESH_SYSTEMMEM , 
        m_d3dDevice , 
        &ppAdjacencyBuffer , 
        &pD3DXMtrlBuffer , 
        NULL , 
        &m_dwNumMaterials , 
        &m_pMesh);
    if(FAILED(hr))
        return FALSE;
    /// 設置材質
    D3DXMATERIAL* matMaterials = static_cast<D3DXMATERIAL*>(pD3DXMtrlBuffer->GetBufferPointer());
    m_pMeshMaterials = new D3DMATERIAL9[m_dwNumMaterials];
    for(DWORD i = 0;i < m_dwNumMaterials;++i)
    {
        m_pMeshMaterials[i] = matMaterials[i].MatD3D;
        m_pMeshMaterials[i].Ambient = m_pMeshMaterials[i].Diffuse;
    }
	// 設置攝像機參數
	D3DXVECTOR3 pos(0.0f , 0.0f , -5.0f);
	D3DXVECTOR3 tag(0.0f , 0.0f , 20.0f);
	D3DXVECTOR3 up(0.0f , 1.0f , 0.0f);
	D3DXMATRIX v;
	D3DXMatrixLookAtLH(&v , &pos , &tag , &up);
	m_d3dDevice->SetTransform(D3DTS_VIEW , &v);
	// 設置(平行)投影矩陣
	D3DXMATRIX proj;
	CRect rect;
	m_wndView.GetClientRect(&rect);
	D3DXMatrixPerspectiveFovLH(
			&proj,
			D3DX_PI * 0.25f, // 45 - degree
			(float)rect.Width() / (float)rect.Height(),
			1.0f,
			1000.0f);

	m_d3dDevice->SetTransform(D3DTS_PROJECTION , &proj);
    m_d3dDevice->SetRenderState(D3DRS_AMBIENT , D3DCOLOR_XRGB(0 , 0 , 0));
	m_d3dDevice->SetRenderState(D3DRS_CULLMODE , D3DCULL_CCW);

    m_d3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);	// 把光照打開
    /// 設置光照
    D3DLIGHT9 light;
    light.Type = D3DLIGHT_DIRECTIONAL;
    D3DXVECTOR3 dir(0.0f , 0.0f , 0.0f);
    D3DXVec3Normalize((D3DXVECTOR3*)&light.Direction , &dir);
    light.Diffuse.r = 0.0f;
    light.Diffuse.g = 0.5f;
    light.Diffuse.b = 0.5f;
    light.Ambient.r = 0.0f;
    light.Ambient.g = 0.3f;
    light.Ambient.b = 0.3f;
    light.Range = sqrtf(FLT_MAX);
    m_d3dDevice->SetLight(0 , &light);
    m_d3dDevice->LightEnable(0 , TRUE);
    /// 載入紋理
    if(FAILED(D3DXCreateTextureFromFile(m_d3dDevice , "../meshs/EvilDrone_Diff.jpg" , &m_pText)))
    {
        AfxMessageBox(_T("紋理文件載入失敗!"));
        return FALSE;
    }
	m_d3dDevice->SetSamplerState(0,D3DSAMP_MAGFILTER,D3DTEXF_LINEAR);
	m_d3dDevice->SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);

    return TRUE;
}

BOOL CMainFrame::SetupGUI()
{
	m_pCEGUIRender = new CEGUI::DirectX9Renderer(m_d3dDevice , 0);	
	new CEGUI::System(m_pCEGUIRender);
	/// 初始化GUI資源的缺省路徑
	CEGUI::DefaultResourceProvider* rp = static_cast<CEGUI::DefaultResourceProvider*>
		(CEGUI::System::getSingleton().getResourceProvider());
	rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/");
	rp->setResourceGroupDirectory("imagesets", "../datafiles/imagesets/");
	rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/");
	rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/");
	rp->setResourceGroupDirectory("looknfeels", "../datafiles/looknfeel/");
	//rp->setResourceGroupDirectory("lua_scripts", "../datafiles/lua_scripts/");
	/// 設置使用的缺省資源
	CEGUI::Imageset::setDefaultResourceGroup("imagesets");
	CEGUI::Font::setDefaultResourceGroup("fonts");
	CEGUI::Scheme::setDefaultResourceGroup("schemes");
	CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
	CEGUI::WindowManager::setDefaultResourceGroup("layouts");
	//CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");
	/// 設置GUI
	using namespace CEGUI;


	/// 得到GUI樣式的圖片集
	Imageset* taharezlookImage;
	try{
		taharezlookImage = ImagesetManager::getSingleton().createImageset("TaharezLook.imageset");
	}catch (CEGUI::Exception& exc)
	{
		AfxMessageBox(exc.getMessage().c_str());
	}
	/// 設置鼠標圖標
	System::getSingleton().setDefaultMouseCursor(&taharezlookImage->getImage("MouseArrow"));

	/// 設置字體
	FontManager::getSingleton().createFont("Commonwealth-10.font");

	/// 設置GUI皮膚
	WidgetLookManager::getSingleton().parseLookNFeelSpecification("TaharezLook.looknfeel");

	/// 載入GUI規劃
	SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");
	/// 得到窗口管理單件
	WindowManager& winMgr = WindowManager::getSingleton();

	/// 從layout文件中載入布局
	Window* gameGUI = winMgr.loadWindowLayout("GameGUI.layout"); 

	/// 設置GUI的Sheet(Sheet是CEGUI中窗口的容器)
	System::getSingleton().setGUISheet(gameGUI);

    /// 設置兩個旋轉按鈕文本
	winMgr.getWindow("GameGUI/Left")->setText("TurnLeft");
	winMgr.getWindow("GameGUI/Right")->setText("TurnRight");
	/// 設置鼠標事件自動重復
	winMgr.getWindow("GameGUI/Left")->setWantsMultiClickEvents(false);
	winMgr.getWindow("GameGUI/Left")->setMouseAutoRepeatEnabled(true);
//	winMgr.getWindow("GameGUI/Left")->setAutoRepeatDelay(1.0f);
	winMgr.getWindow("GameGUI/Right")->setWantsMultiClickEvents(false);
	winMgr.getWindow("GameGUI/Right")->setMouseAutoRepeatEnabled(true);
//	winMgr.getWindow("GameGUI/Right")->setAutoRepeatDelay(1.0f);
	/// 添加兩個按鈕的事件處理函數
	winMgr.getWindow("GameGUI/Left")->subscribeEvent(
		CEGUI::Window::EventMouseButtonDown, 
		CEGUI::Event::Subscriber(&CMainFrame::TurnLeft, this));
	winMgr.getWindow("GameGUI/Right")->subscribeEvent(
		CEGUI::Window::EventMouseButtonDown, 
		CEGUI::Event::Subscriber(&CMainFrame::TurnRight, this));

	return TRUE;
}

void CMainFrame::OnDestroy()
{
	CFrameWnd::OnDestroy();

	CleanUp();

	m_d3dDevice->Release();
}
void CMainFrame::OnMouseMove(UINT nFlags, CPoint point)
{
	::ShowCursor(TRUE);

	CFrameWnd::OnMouseMove(nFlags, point);
}

bool CMainFrame::TurnLeft(const CEGUI::EventArgs& e)
{
	m_rotateY += 0.1f;
	
	return true;
}

bool CMainFrame::TurnRight(const CEGUI::EventArgs& e)
{
	m_rotateY -= 0.1f;

	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影网| 97超碰欧美中文字幕| 国产麻豆精品theporn| 99久久婷婷国产综合精品 | 亚洲午夜影视影院在线观看| 国模大尺度一区二区三区| 色婷婷亚洲一区二区三区| 欧美高清在线精品一区| 青青草国产成人av片免费| 欧洲精品一区二区| 1024亚洲合集| bt欧美亚洲午夜电影天堂| 国产区在线观看成人精品| 久久精品国内一区二区三区| 欧美老人xxxx18| 亚洲一区国产视频| 色嗨嗨av一区二区三区| 国产精品私房写真福利视频| 国产在线观看一区二区 | 色婷婷综合久久久中文一区二区| 精品久久国产老人久久综合| 三级久久三级久久| 7777女厕盗摄久久久| 亚洲一区二区美女| 欧美日韩在线播放| 亚洲高清在线视频| 欧美综合一区二区| 午夜日韩在线观看| 欧美日韩一区精品| 视频一区欧美精品| 91精品国产综合久久久久久久久久 | 九一九一国产精品| 日韩视频一区在线观看| 日本亚洲欧美天堂免费| 日韩欧美一二三| 精品一区二区三区免费观看| 欧美精品一区二区三区蜜桃视频| 国产尤物一区二区| 久久精品亚洲麻豆av一区二区 | 精品国产一区二区三区久久久蜜月| 日韩精品成人一区二区在线| 欧美日本乱大交xxxxx| 丝袜亚洲另类欧美| 日韩一区二区三区电影| 国产91丝袜在线观看| 亚洲精品一区二区三区福利 | 蜜桃久久久久久| 日韩网站在线看片你懂的| 狠狠色综合日日| 中文字幕精品三区| 色综合久久中文综合久久牛| 午夜精品福利久久久| 日韩视频中午一区| 成人高清在线视频| 亚洲国产精品天堂| 欧美mv日韩mv| 99久精品国产| 日本不卡一二三| 国产精品天干天干在观线| 日本道色综合久久| 捆绑紧缚一区二区三区视频| 中文字幕不卡在线观看| 欧美日韩综合在线| 国产91精品一区二区麻豆网站 | 9191成人精品久久| 国产成人综合精品三级| 亚洲综合免费观看高清完整版在线 | 精品污污网站免费看| 久久99热国产| 亚洲在线免费播放| 日韩精品一区二区三区在线观看 | 亚洲女女做受ⅹxx高潮| 欧美一区二区三区免费观看视频| 成人一区在线观看| 日韩国产在线一| 欧美国产乱子伦| 91精品国产欧美日韩| 99久久伊人精品| 久久91精品久久久久久秒播 | 中文字幕在线一区二区三区| 欧美精品乱码久久久久久| aa级大片欧美| 韩国一区二区在线观看| 亚洲午夜久久久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91.com在线观看| 91视频免费观看| 成人午夜精品在线| 激情文学综合网| 日本欧美在线看| 亚洲黄色av一区| 国产精品夫妻自拍| 国产视频视频一区| 日韩一二三四区| 欧美日韩aaa| 欧美三级日韩三级| 99国产麻豆精品| 成人精品免费网站| 国产91精品免费| 国产一区二三区| 久久精品国产第一区二区三区| 亚洲成人黄色影院| 亚洲国产日韩综合久久精品| 国产精品天美传媒沈樵| 久久亚洲二区三区| 精品国产成人系列| 日韩视频在线观看一区二区| 91精品国产综合久久久久| 欧美日韩激情在线| 欧美精品第1页| 欧美精品乱码久久久久久按摩| 精品1区2区3区| 欧美日韩黄视频| 欧美一级一级性生活免费录像| 91精品国产91综合久久蜜臀| 欧美日韩黄色一区二区| 717成人午夜免费福利电影| 欧美一区二区国产| 欧美大片免费久久精品三p| 精品国产一区二区三区忘忧草| 欧美精品一区二区三区蜜桃视频| 久久久精品中文字幕麻豆发布| 久久九九99视频| 中文字幕综合网| 亚洲国产成人高清精品| 日韩—二三区免费观看av| 毛片av一区二区| 丁香婷婷综合激情五月色| 99精品欧美一区二区蜜桃免费| 99在线精品一区二区三区| 日本电影亚洲天堂一区| 欧美一区二区三区在线电影| 中文字幕在线播放不卡一区| 国产精品美女久久福利网站| 亚洲男同性恋视频| 日韩成人伦理电影在线观看| 美女精品一区二区| 懂色av一区二区在线播放| 91看片淫黄大片一级在线观看| 欧美日韩国产片| 久久精品男人的天堂| 亚洲人亚洲人成电影网站色| 亚洲高清免费观看| 国产一区激情在线| 在线视频一区二区三| 日韩欧美亚洲国产精品字幕久久久| 国产日韩高清在线| 亚洲国产精品人人做人人爽| 精品一区二区在线看| 99精品视频一区二区| 日韩欧美视频一区| 国产精品无人区| 日本中文在线一区| 99国产精品一区| 日韩欧美一区二区久久婷婷| 国产精品乱码人人做人人爱| 五月婷婷激情综合| 99精品欧美一区二区三区小说 | 国产一区二区三区在线观看免费视频 | 日本一区二区三区在线观看| 亚洲一二三区在线观看| 久久99热这里只有精品| 欧美亚洲国产一区二区三区| 久久一区二区视频| 图片区日韩欧美亚洲| 99综合电影在线视频| 精品国产成人在线影院 | 欧美日韩国产一级| 国产精品乱人伦中文| 日本欧美在线看| 91麻豆精品91久久久久同性| 久久精品亚洲一区二区三区浴池| 亚洲主播在线播放| 99久久国产综合精品女不卡| 精品88久久久久88久久久| 丝袜亚洲另类丝袜在线| 成人av片在线观看| 久久久www成人免费无遮挡大片| 婷婷久久综合九色综合伊人色| 91蝌蚪porny| 亚洲日本乱码在线观看| 国产精品88av| 久久久国产午夜精品| 久久精品国产久精国产| 欧美一级xxx| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品视频色一区| 亚洲国产成人av| 91福利在线看| 亚洲国产中文字幕| 欧美亚洲另类激情小说| 亚洲综合色婷婷| 欧美视频一区二区三区在线观看| 一区二区在线电影| 91豆麻精品91久久久久久| 亚洲乱码日产精品bd| 日本韩国一区二区| 亚洲成av人片在线观看无码| 欧美日韩在线三区| 日本午夜一本久久久综合|