OpenGL框架封装--基于NeHe框架

本文介绍了一个基于NeHe框架实现的OpenGL游戏引擎的封装过程,包括Utility、OpenGL_TOOLS、GameEngine和MyWinFrame四个主要部分。通过创建和初始化窗口,设置OpenGL上下文,以及处理窗口消息,实现全屏和窗口模式的切换,为OpenGL应用提供了一个基本的运行环境。
摘要由CSDN通过智能技术生成

// Utility.h

#ifndef UTILITY_H_
#define UTILITY_H_
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
#endif
#ifndef OPENGL_TOOLS_
#define OPENGL_TOOLS_
#include <glew.h>
#pragma comment(lib,"glew32.lib")
#include <GLUT.H>
#pragma comment(lib,"glut.lib")
#pragma comment(lib,"opengl.lib")
#pragma comment(lib,"glaux.lib")
#endif

// GameEngine.h 

#ifndef GAMEENGINE_H_
#define GAMEENGINE_H_
#include "Utility.h"
#pragma once
class CGameEngine
{
public:
CGameEngine();
~CGameEngine();
static GLvoid ReSizeGLScene(GLsizei width, GLsizei height);// 重置OpenGL窗口大小
BOOL InitGL(GLvoid);
VOID onLogic();
BOOL DrawGLScene(GLvoid);
VOID onCleanup();
};
#endif

// GameEngine.cpp

#include "GameEngine.h"
#include "MyWinFrame.h"


CGameEngine::CGameEngine()
{
}
CGameEngine::~CGameEngine()
{
}
VOID CGameEngine::ReSizeGLScene(GLsizei width, GLsizei height)
{
if (height == 0) // 防止被零除
{
height = 1; // 将Height设为1
}
glViewport(0, 0, width, height); // 重置当前的视口
glMatrixMode(GL_PROJECTION); // 选择投影矩阵
glLoadIdentity(); // 重置投影矩阵
// 设置视口的大小
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵
glLoadIdentity(); // 重置模型观察矩阵
}
BOOL CGameEngine::InitGL(GLvoid)
{
glShadeModel(GL_SMOOTH); // 启用阴影平滑
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 黑色背景
glClearDepth(1.0f); // 设置深度缓存
glEnable(GL_DEPTH_TEST); // 启用深度测试
glDepthFunc(GL_LEQUAL); // 所作深度测试的类型
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 告诉系统对透视进行修正
return TRUE; // 初始化 OK
}
BOOL CGameEngine::DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
glLoadIdentity(); // 重置当前的模型观察矩阵
return TRUE; // 一切 OK
}

VOID CGameEngine::onLogic()
{
}
VOID CGameEngine::onCleanup()
{

}

//MyWinFrame.h

#ifndef MYWINFRAME_H_
#define MYWINFRAME_H_
#pragma once
#include "Utility.h"
#include "GameEngine.h"
class CMyWinFrame
{
public:
static CGameEngine m_game;
public:
CMyWinFrame();
~CMyWinFrame();
BOOL RegisterGLWindow(char *title);
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag);
GLvoid KillGLWindow(GLvoid);
static LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
};
#endif

//MyWinFrame.cpp

#include "MyWinFrame.h"


HGLRC hRC = NULL; // 窗口着色描述表句柄
HDC hDC = NULL; // OpenGL渲染描述表句柄
HWND hWnd = NULL; // 保存我们的窗口句柄
HINSTANCE hInstance; // 保存程序的实例
bool keys[256]; // 保存键盘按键的数组
bool active = TRUE; // 窗口的活动标志,缺省为TRUE
bool fullscreen = TRUE; // 全屏标志缺省,缺省设定成全屏模式
CGameEngine CMyWinFrame::m_game = CGameEngine();
CMyWinFrame::CMyWinFrame()
{

}


CMyWinFrame::~CMyWinFrame()
{

}
GLvoid CMyWinFrame::KillGLWindow(GLvoid)
{
if (fullscreen) // 我们处于全屏模式吗?
{
ChangeDisplaySettings(NULL, 0); // 是的话,切换回桌面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值