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

📄 oglutil.h

📁 3D赛车游戏源代码-用Visual Studio 2005
💻 H
字号:
//----------------------------------------------
// CDisplay类: 主要处理OpenGL的屏幕显示
// OGLutil.h: CDisplay类的声明
//   Copy Rights Wonderful 2005
//----------------------------------------------

#ifndef _OGLUTIL_H
#define _OGLUTIL_H


#include "Vector3.h"

// 一些释放指针的宏
#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }

// 纹理文件名最大字符数
const int kMaxTextureNameChars = 64;

//-------------------------------------------------------------------------------
// 顶点
//-------------------------------------------------------------------------------
struct RenderVertex 
{
	Vector3	p;			// 顶点坐标
	float	u, v;		// 纹理坐标
};

//-------------------------------------------------------------------------------
// 三角形面
//-------------------------------------------------------------------------------
struct RenderTri 
{
	unsigned short index[3];	// 三个顶点的索引
};

//-------------------------------------------------------------------------------
// 纹理引用
//-------------------------------------------------------------------------------
struct TextureReference 
{
	char  name[kMaxTextureNameChars];	// 纹理的文件名
	UINT  handle;						// 纹理的标识
};

//-------------------------------------------------------------------------------
// CDisplay类主要处理OpenGL屏幕的载入与释放,
// 窗口与全屏幕模式的切换,以及渲染的准备与结束
//-------------------------------------------------------------------------------
class CDisplay
{
public:
	// 构造析构函数
	CDisplay();
	~CDisplay();

	// 创建全屏模式窗口
	bool CreateFullScreenDisplay(HWND hWnd, DWORD dwWidth, DWORD dwHeigh, DWORD dwBPP);
    // 创建窗口模式窗口
	bool CreateWindowedDisplay(HWND hWnd, DWORD dwWidth, DWORD dwHeight);
	// 摧毁
	bool DestroyObjects();
	
	// 初始化
	bool Init();
	// 结束
	bool Term();

	// 开始绘制
	void BeginDraw();
	// 结束绘制
	void EndDraw();

	// 重置窗口大小
	void ResizeScene(GLsizei width, GLsizei height);
	// 切换缓冲区
	bool Present();

protected:
	HGLRC		m_hRC;				// GL的设备句柄
	HDC			m_hDC;				// 窗口设备句柄
	HWND		m_hWnd;				// 窗口句柄
	bool        m_bWindowed;		// 是否在窗口模式下
};

//-------------------------------------------------------------------------------
// CRenderer类主要处理OpenGL的渲染
//-------------------------------------------------------------------------------
class CRenderer 
{
public:
	// 把当前视图矩阵入栈
	void PushModelViewMatrix();
	// 弹出栈顶视图矩阵
	void PopModelViewMatrix();
	// 当前视图矩阵乘以一个矩阵
	void MulMatrix(const float *m);
	
	// 渲染三角形网孔
	void RenderTriMesh(const RenderVertex *vertexList, int vertexCount, const RenderTri *triList, int triCount);
	// 选择纹理
	void SelectTexture(TextureReference &texture);

	// 渲染一个盒子,测试用
	void RenderBox(const Vector3& min, const Vector3& max); 
};

//-------------------------------------------------------------------------------
// 一个全局的CRenderer变量
//-------------------------------------------------------------------------------
extern CRenderer g_Renderer;

#endif

⌨️ 快捷键说明

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