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

📄 headerin3d.cpp

📁 VC++ DEMO, used for the beginners and the amour
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// HeaderIn3D.cpp: implementation of the HeaderIn3D class.
//
//////////////////////////////////////////////////////////////////////
#include "../CGE_CORE/HEADERS.H"

#include "HeaderIn3D.h"

USING NAMESPACE CGE;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction

#define ANGLE 1
#define HEIGHT 0.75f
#define ROW 20
#define COL 20
const FLOAT LEAST = 0.15f;


short DefMaze[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
				   1,0,1,0,0,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,
				   1,0,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,
				   1,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,1,1,1,
				   1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,
				   1,0,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,1,
				   1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,1,
				   1,0,0,1,0,1,1,0,1,0,0,1,0,1,0,0,0,0,0,1,
				   1,0,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,
				   1,0,0,1,0,1,0,1,1,0,1,1,0,0,0,0,0,1,0,1,
				   1,1,0,1,0,1,0,1,0,1,0,0,0,1,1,1,1,1,0,1,
				   1,0,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,
				   1,1,0,1,0,1,1,1,0,0,0,0,0,1,0,1,1,0,1,1,
				   1,0,0,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,0,1,
				   1,0,1,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,1,1,
				   1,0,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,
				   1,0,1,0,1,0,1,1,1,1,1,1,0,1,0,1,0,0,0,1,
				   1,0,0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,
				   1,1,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,1,
				   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,};

typedef struct MAZEVERTEX {
	union {
		float     x;
		float     dvX;
	};
	union {
		float     y;
		float     dvY;
	};
	union {
		float     z;
		float     dvZ;
	};
	union {
		float     nx;
		float     dvNX;
	};
	union {
		float     ny;
		float     dvNY;
	};
	union {
		float     nz;
		float     dvNZ;
	};
	union {
		float     tu;
		float     dvTU;
	};
	union {
		float     tv;
		float     dvTV;
	};
	MAZEVERTEX() { }
	MAZEVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv)
	{
		x = v.x; y = v.y; z = v.z;
		nx = n.x; ny = n.y; nz = n.z;
		tu = _tu; tv = _tv;
	}
	enum
	{
		FVF_MAZEVERTEX = (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
	};
}*LPMAZEVERTEX;
//////////////////////////////////////////////////////////////////////
BOOL Keyboard(UINT nScanCode,WPARAM wParam,LPARAM lParam)
{
	return theApp.LocalKeyboard(nScanCode,wParam,lParam);
}

HeaderIn3D::HeaderIn3D()
{
	this->m_dyCamera = NULL;
	this->m_dyConsole = NULL;
	this->m_strHelpInfo[0]='\0';
	this->m_dyChar2Font = NULL;
	this->m_dyEnFont = NULL;
	this->m_dyCardFont = NULL;
	this->m_dyFPS = NULL;
	this->m_dyfSpeed = 1;
}

HeaderIn3D::~HeaderIn3D()
{
	SAFE_DELETE(m_dyCamera);
	SAFE_DELETE(m_dyConsole);
	SAFE_DELETE(m_dyEnFont);
	SAFE_DELETE(m_dyChar2Font);
	SAFE_DELETE(m_dyCardFont);
	SAFE_DELETE(m_dyFPS);
}

BOOL HeaderIn3D::InitializeOnFirstTime()
{
	m_dyCamera = new MATRIX::CAMERA;
	m_dyConsole = new INPUT::CONSOLE;
	m_dyEnFont = new FONT::EnFont;
	m_dyChar2Font = new FONT::Char2Font;
	m_dyCardFont = new FONT::CardFont;
	m_dyFPS = new TIME::FPS;
	return TRUE;
}



BOOL HeaderIn3D::InitializeEntironment()
{
	HWND hWnd = D3DPARAMETER.hDeviceWindow;
	m_dyConsole->Create();
	m_dyConsole->CreateKeyboard();
	m_dyConsole->SetKeyboardBehavior(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_A,2,0),INPUT::HotKey(Keyboard,2,DIK_A));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_D,2,0),INPUT::HotKey(Keyboard,2,DIK_D));
	_tcscat(m_strHelpInfo,TEXT("A 向左转\nD 向右转\n"));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_LEFT,2,0),INPUT::HotKey(Keyboard,2,DIK_LEFT));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_RIGHT,2,0),INPUT::HotKey(Keyboard,2,DIK_RIGHT));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_W,2,0),INPUT::HotKey(Keyboard,2,DIK_W));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_S,2,0),INPUT::HotKey(Keyboard,2,DIK_S));
	_tcscat(m_strHelpInfo,TEXT("W 向前\nS 向后\n"));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_ADD,1,0),INPUT::HotKey(Keyboard,1,DIK_ADD));
	m_dyConsole->SetKeyboardHotKey(INPUT::KeyboardKey(DIK_SUBTRACT,1,0),INPUT::HotKey(Keyboard,1,DIK_SUBTRACT));
	ZeroMemory(&m_dyPointLight,sizeof(D3DLIGHT8));
	m_dyPointLight.Type = D3DLIGHT_POINT;
	m_dyPointLight.Diffuse.r = 1.0f;
	m_dyPointLight.Diffuse.g = 1.0f;
	m_dyPointLight.Diffuse.b = 1.0f;
	m_dyPointLight.Diffuse.a = 1.0f;
	m_dyPointLight.Attenuation1 = 1.0f;
	m_dyPointLight.Ambient = m_dyPointLight.Diffuse;
	m_dyPointLight.Range = 4.0f;
	ZeroMemory(&m_dyMazeMat,sizeof(D3DMATERIAL8));
	m_dyMazeMat.Diffuse.r = 0.8f;
	m_dyMazeMat.Diffuse.g = 0.8f;
	m_dyMazeMat.Diffuse.b = 0.8f;
	m_dyMazeMat.Diffuse.a = 0.8f;
	m_dyMazeMat.Ambient = m_dyMazeMat.Diffuse;
	m_dyCamera->MatrixLookAt(D3DXVECTOR3(-17,0,-17),D3DXVECTOR3(-17,0,1),D3DXVECTOR3(0,1,0));

	m_dyEnFont->SetEnFont(DEVICE,"Arial",10,0,0,0);
	m_dyChar2Font->SetCacheLevel(2);
	m_dyChar2Font->SetChar2Font("Arial",16,100,0,0);
	m_dyCardFont->SetCardFile("FONT.JPG",512,512);

	return TRUE;
}

BOOL HeaderIn3D::SetfreeEntironment()
{
	SAFE_RELEASE(m_dyRoof);
	SAFE_RELEASE(m_dyFloor);
	SAFE_RELEASE(m_dyMazeWall);
	SAFE_RELEASE(m_dyWin);
	SAFE_RELEASE(m_dyMazeVB);
	m_dyEnFont->SetfreeContext();
	m_dyChar2Font->SetfreeContext();
	m_dyCardFont->SetfreeContext();
	return TRUE;
}

BOOL HeaderIn3D::AfreshEntironment()
{
	HRESULT hr;
	hr = D3DXCreateTextureFromFile(DEVICE,"SPACE.JPG",&m_dyRoof);
	if (FAILED(hr)) return FALSE;
	hr = D3DXCreateTextureFromFile(DEVICE,"FLOOR.JPG",&m_dyFloor);
	if (FAILED(hr)) return FALSE;
	hr = D3DXCreateTextureFromFile(DEVICE,"WALL.JPG",&m_dyMazeWall);
	if (FAILED(hr)) return FALSE;
	hr = D3DXCreateTextureFromFile(DEVICE,"GIRL.JPG",&m_dyWin);
	if (FAILED(hr)) return FALSE;
	DEVICE->SetRenderState( D3DRS_CULLMODE,D3DCULL_NONE);
	DEVICE->SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
	DEVICE->SetTextureStageState(0,D3DTSS_MINFILTER, D3DTEXF_LINEAR);
	DEVICE->SetTextureStageState(0,D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
	DEVICE->SetRenderState(D3DRS_ZENABLE,2);

	D3DXMATRIX mat;
	D3DXMatrixIdentity(&mat);
	D3DXMatrixPerspectiveFovLH(&mat,D3DX_PI/4,(FLOAT)BackBufferWidth()/BackBufferHeight(),0.001f,1000.0f);
	DEVICE->SetTransform(D3DTS_PROJECTION,&mat);

	hr = DEVICE->CreateVertexBuffer(6 * 6 * sizeof(MAZEVERTEX),0,0,D3DPOOL_MANAGED,&m_dyMazeVB);
	if (FAILED(hr)) return FALSE;
	LPMAZEVERTEX Maze = NULL;
	hr = m_dyMazeVB->Lock(0,0,(BYTE**)&Maze,0);
	if (FAILED(hr)) return FALSE;
	// 顶面.
	Maze[0] = MAZEVERTEX(D3DXVECTOR3( ROW,HEIGHT, COL),D3DXVECTOR3(0,-1.0f,0),ROW,0);
	Maze[1] = MAZEVERTEX(D3DXVECTOR3(-ROW,HEIGHT, COL),D3DXVECTOR3(0,-1.0f,0),0,0);
	Maze[2] = MAZEVERTEX(D3DXVECTOR3( ROW,HEIGHT,-COL),D3DXVECTOR3(0,-1.0f,0),ROW,COL);
	Maze[3] = MAZEVERTEX(D3DXVECTOR3( ROW,HEIGHT,-COL),D3DXVECTOR3(0,-1.0f,0),ROW,COL);
	Maze[4] = MAZEVERTEX(D3DXVECTOR3(-ROW,HEIGHT, COL),D3DXVECTOR3(0,-1.0f,0),0,0);
	Maze[5] = MAZEVERTEX(D3DXVECTOR3(-ROW,HEIGHT,-COL),D3DXVECTOR3(0,-1.0f,0),0,COL);

	// 底面.
	Maze[6] = MAZEVERTEX(D3DXVECTOR3(-ROW,-HEIGHT, COL),D3DXVECTOR3(0,1.0f,0),0,0);
	Maze[7] = MAZEVERTEX(D3DXVECTOR3( ROW,-HEIGHT, COL),D3DXVECTOR3(0,1.0f,0),ROW,0);
	Maze[8] = MAZEVERTEX(D3DXVECTOR3(-ROW,-HEIGHT,-COL),D3DXVECTOR3(0,1.0f,0),0,COL);
	Maze[9] = MAZEVERTEX(D3DXVECTOR3(-ROW,-HEIGHT,-COL),D3DXVECTOR3(0,1.0f,0),0,COL);
	Maze[10] = MAZEVERTEX(D3DXVECTOR3( ROW,-HEIGHT, COL),D3DXVECTOR3(0,1.0f,0),ROW,0);
	Maze[11] = MAZEVERTEX(D3DXVECTOR3( ROW,-HEIGHT,-COL),D3DXVECTOR3(0,1.0f,0),ROW,COL);
	// 前面
	Maze[12] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,-1),D3DXVECTOR3(0,0,-1),0,1);
	Maze[13] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,-1),D3DXVECTOR3(0,0,-1),0,0);
	Maze[14] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,-1),D3DXVECTOR3(0,0,-1),1,1);
	Maze[15] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,-1),D3DXVECTOR3(0,0,-1),1,1);
	Maze[16] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,-1),D3DXVECTOR3(0,0,-1),0,0);
	Maze[17] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,-1),D3DXVECTOR3(0,0,-1),1,0);
	// 右面
	Maze[18] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,-1),D3DXVECTOR3(1,0,0),0,0);
	Maze[19] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,1),D3DXVECTOR3(1,0,0),1,0);
	Maze[20] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,-1),D3DXVECTOR3(1,0,0),0,1);
	Maze[21] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,-1),D3DXVECTOR3(1,0,0),0,1);
	Maze[22] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,1),D3DXVECTOR3(1,0,0),1,0);
	Maze[23] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,1),D3DXVECTOR3(1,0,0),1,1);
	// 背面
	Maze[24] = MAZEVERTEX(D3DXVECTOR3(1,-HEIGHT,1),D3DXVECTOR3(0,0,1),0,1);
	Maze[25] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,1),D3DXVECTOR3(0,0,1),0,0);
	Maze[26] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,1),D3DXVECTOR3(0,0,1),1,1);
	Maze[27] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,1),D3DXVECTOR3(0,0,1),1,1);
	Maze[28] = MAZEVERTEX(D3DXVECTOR3(1,HEIGHT,1),D3DXVECTOR3(0,0,1),0,0);
	Maze[29] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,1),D3DXVECTOR3(0,0,1),1,0);
	// 左面
	Maze[30] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,1),D3DXVECTOR3(-1,0,0),0,0);
	Maze[31] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,-1),D3DXVECTOR3(-1,0,0),1,0);
	Maze[32] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,1),D3DXVECTOR3(-1,0,0),0,1);
	Maze[33] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,1),D3DXVECTOR3(-1,0,0),0,1);
	Maze[34] = MAZEVERTEX(D3DXVECTOR3(-1,HEIGHT,-1),D3DXVECTOR3(-1,0,0),1,0);
	Maze[35] = MAZEVERTEX(D3DXVECTOR3(-1,-HEIGHT,-1),D3DXVECTOR3(-1,0,0),1,1);
	hr = m_dyMazeVB->Unlock();
	if (FAILED(hr)) return FALSE;

	m_dyChar2Font->CreateContext(DEVICE);
	m_dyEnFont->CreateContext(DEVICE);
	m_dyCardFont->CreateCardFont(DEVICE,D3DCOLOR_RGBA(0,0,0,255));

	return TRUE;
}

BOOL HeaderIn3D::CheckFrameInMove()
{
	m_dyConsole->UpdateKeyboard();
	m_dyPointLight.Position = m_dyCamera->EyeAt();

⌨️ 快捷键说明

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