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

📄 scene3.cpp

📁 我们数据结构课的课程设计
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include "stdafx.h" 
#include "scene3.h" 
#include "glval.h"
#include "SkinnedMesh.h"
#include "scene2.h" 
#include "camera.h"

extern RECT rtNext; 
extern IDirect3DTexture9* TextureButton[8]; 
enum ButtonStatus newbuttonstatus; 
extern enum ButtonStatus exitbuttonstatus; 

extern TCHAR debug[1024]; 

extern ID3DXMesh* maze_mesh;
extern IDirect3DTexture9* Textures[4]; // texture for each subset
bool sign = true; 
int iterX, iterY; 
RECT rtNew; 

void CleanScene3()
{
    CleanScene2(); 
    path.clear(); 
    
    delete m_ArcBall; 
    InvalidateDeviceObjects(); 
    DeleteDeviceObjects();  
}

bool LoadScene3()
{
    bool ret = false; 
    m_ArcBall = new CD3DArcBall;   
    //
    // 查找路径
    //
    if (!findpath()) 
    {
        lstrcpy(debug, TEXT("找不到路径")); 
        ret = false; 
    }
    
    // for debug
    TCHAR buff[512]; 
    if (!path.empty())
    {
        iter=path.begin();
        _stprintf(debug, TEXT("最短路径:(%d,%d) "), iter->x, iter->y);
        for (iter++; iter!=path.end(); ++iter)
        {
            _stprintf(buff, TEXT("(%d,%d) "), iter->x, iter->y); 
            lstrcat(debug, buff); 
        }
        iter = path.begin(); 
        iterX = iter->x, iterY = iter->y; 
    }
    exitbuttonstatus = ButtonStatus::NORMAL; 
    newbuttonstatus = ButtonStatus::NORMAL; 

    //////////////////////////////////////
    m_SkinningMethod = D3DNONINDEXED;
    m_pBoneMatrices = NULL;
    m_NumBoneMatricesMax = 0;

    InitDeviceObjects();
    RestoreDeviceObjects();

    sign = true;

    return ret; 
}

bool Scene3(float timeDelta)
{
	if( Device )
	{
        FLOAT fAppTime        = DXUtil_Timer( TIMER_GETAPPTIME );
        FLOAT fElapsedAppTime = DXUtil_Timer( TIMER_GETELAPSEDTIME );
        if( 0.0f == fElapsedAppTime )
            return S_OK;

        // Store the time for the app
        m_fTime        = fAppTime;
        m_fElapsedTime = fElapsedAppTime;

        // Frame move the scene
        FrameMove();

		Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0, 1.0f, 0); 
		Device->BeginScene();
   
        // 
        // 画背景
        // 
            
		IDirect3DVertexBuffer9 *pBkgnd; 
		if (FAILED(Device->CreateVertexBuffer(
			6 * sizeof(VertexRHWTEX), 
			D3DUSAGE_WRITEONLY, 
			FVF_VERTEXRHWTEX, 
			D3DPOOL_MANAGED, 
			&pBkgnd, 
			0)))
		{
			ERMSG("Device->CreateVertexBuffer(pNextButton) -- FAILED"); 
			return 0; 
		}
        VertexRHWTEX *vertexrhwtex;
        pBkgnd->Lock(0, 6*sizeof(VertexRHWTEX), (void**)&vertexrhwtex, 0); 

        vertexrhwtex[0] = VertexRHWTEX(0, ScreenHeight, 0.9999f, 1.0f, 0.0f, ScreenHeight/46.0f); 
        vertexrhwtex[1] = VertexRHWTEX(0, 0, 0.9999f, 1.0f, 0.0f, 0.0f); 
        vertexrhwtex[2] = VertexRHWTEX(ScreenWidth, 0, 0.9999f, 1.0f, ScreenWidth/123.0f, 0.0f); 
        vertexrhwtex[3] = VertexRHWTEX(0, ScreenHeight, 0.9999f, 1.0f, 0.0f, ScreenHeight/46.0f); 
        vertexrhwtex[4] = VertexRHWTEX(ScreenWidth, 0, 0.9999f, 1.0f, ScreenWidth/123.0f, 0.0f); 
        vertexrhwtex[5] = VertexRHWTEX(ScreenWidth, ScreenHeight, 0.9999f, 1.0f, ScreenWidth/123.0f, ScreenHeight/46.0f); 

        pBkgnd->Unlock(); 
		Device->SetStreamSource(0, pBkgnd, 0, sizeof(VertexRHWTEX));
		Device->SetFVF(FVF_VERTEXRHWTEX); 
        Device->SetTexture(0, Texture_bkgnd); 
		Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2); 

        // 
        // 画 Title 分割线
        //

		IDirect3DVertexBuffer9 *pSplitLine; 
		if (FAILED(Device->CreateVertexBuffer(
			6 * sizeof(VertexRHW), 
			D3DUSAGE_WRITEONLY, 
			FVF_VERTEXRHW, 
			D3DPOOL_MANAGED, 
			&pSplitLine, 
			0)))
		{
			ERMSG("Device->CreateVertexBuffer -- FAILED"); 
			return 0; 
		}
        VertexRHW *vertexrhw; 
		pSplitLine->Lock(0, 6*sizeof(VertexRHW), (void**)&vertexrhw, 0); 
        
        vertexrhw[0] = VertexRHW(0.0f, 30.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 
        vertexrhw[1] = VertexRHW(0.0f, 27.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 
        vertexrhw[2] = VertexRHW(ScreenWidth, 27.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 
        vertexrhw[3] = VertexRHW(0.0f, 30.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 
        vertexrhw[4] = VertexRHW(ScreenWidth, 27.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 
        vertexrhw[5] = VertexRHW(ScreenWidth, 30.0f, 0.9999f, 1.0f, D3DCOLOR_XRGB(213,212,212)); 

        pSplitLine->Unlock(); 
		Device->SetStreamSource(0, pSplitLine, 0, sizeof(VertexRHW));
		Device->SetFVF(FVF_VERTEXRHW); 
		Device->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2); 

		//
		// 创建字体
		//
		LOGFONT lf;
		ZeroMemory(&lf, sizeof(LOGFONT));
		lf.lfHeight = 25; 
		lf.lfWidth = 12; 
		lf.lfWeight = 500; 
		lf.lfCharSet = DEFAULT_CHARSET; 
		lstrcpy(lf.lfFaceName, TEXT("Times New Roman")); 

		LPD3DXFONT pFont; 
		if (FAILED(D3DXCreateFontIndirect(Device, &lf, &pFont)))
		{
			ERMSG("D3DXCreateFontIndirect -- FAILED"); 
			return 0; 
		}

        TCHAR *title = TEXT("迷宫演示程序   作者:韩小龙,陈文豪,施自成,何健,陈卓");
	    RECT rtTitle  = { 5,  5, ScreenWidth, 60}; 
		pFont->Begin(); 
		pFont->DrawText(title, lstrlen(title), &rtTitle, DT_LEFT, D3DCOLOR_ARGB(255,255,255,0)); 
		pFont->End(); 

        rtTitle.top += 50; 
        rtTitle.bottom += 50; 
		pFont->DrawText(debug, lstrlen(debug), &rtTitle, DT_LEFT, D3DCOLOR_ARGB(255,255,0,0)); 

        // 
        // New按钮
        // 
        SetRect(&rtNew, ScreenWidth-180 - 180, ScreenHeight-80, ScreenWidth-33 - 180, ScreenHeight-19); 
		IDirect3DVertexBuffer9 *pNewButton; 
		if (FAILED(Device->CreateVertexBuffer(
			6 * sizeof(VertexRHWTEX), 
			D3DUSAGE_WRITEONLY, 
			FVF_VERTEXRHWTEX, 
			D3DPOOL_MANAGED, 
			&pNewButton, 
			0)))
		{
			ERMSG("Device->CreateVertexBuffer(pNextButton) -- FAILED"); 
			return 0; 
		}
        
        pNewButton->Lock(0, 6*sizeof(VertexRHWTEX), (void**)&vertexrhwtex, 0); 

        vertexrhwtex[0] = VertexRHWTEX(rtNew.left, rtNew.bottom, 0.0f, 1.0f, 0.0f, 1.0f); 
        vertexrhwtex[1] = VertexRHWTEX(rtNew.left, rtNew.top, 0.0f, 1.0f, 0.0f, 0.0f); 
        vertexrhwtex[2] = VertexRHWTEX(rtNew.right, rtNew.top, 0.0f, 1.0f, 1.0f, 0.0f); 
        vertexrhwtex[3] = VertexRHWTEX(rtNew.left, rtNew.bottom, 0.0f, 1.0f, 0.0f, 1.0f); 
        vertexrhwtex[4] = VertexRHWTEX(rtNew.right, rtNew.top, 0.0f, 1.0f, 1.0f, 0.0f); 
        vertexrhwtex[5] = VertexRHWTEX(rtNew.right, rtNew.bottom, 0.0f, 1.0f, 1.0f, 1.0f); 

        pNewButton->Unlock(); 
		Device->SetStreamSource(0, pNewButton, 0, sizeof(VertexRHWTEX));
		Device->SetFVF(FVF_VERTEXRHWTEX); 
        if (newbuttonstatus == ButtonStatus::NORMAL)
            Device->SetTexture(0, TextureButton[6]); 
        else if (newbuttonstatus == ButtonStatus::MOUSEOVER)
            Device->SetTexture(0, TextureButton[7]); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -