📄 scene3.cpp
字号:
#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 + -