📄 oglutil.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 + -