VC五子棋程序源文件
### VC五子棋程序源文件知识点解析 #### 一、项目背景与技术栈 本项目为一个基于Visual Studio 2008环境下的C++语言实现的五子棋游戏程序。作者强调在运行该程序前需确保已正确配置OpenGL环境,否则可能会导致编译失败或运行异常。此外,作者还提供了缺失的图形数据文件以及OpenGL配置教程。 #### 二、关键技术点详解 ##### 1. OpenGL配置 - **OpenGL简介**:OpenGL(Open Graphics Library)是一种跨平台的API,用于渲染2D、3D矢量图形。它主要由一系列函数组成,可以用来创建复杂的图形。 - **配置步骤**: - 安装OpenGL库:通常情况下,安装Visual Studio时会自带OpenGL支持,但某些情况下可能需要额外安装OpenGL库。 - 配置项目设置:在项目属性中设置包含目录和库目录等路径,确保项目能够找到OpenGL相关的头文件和库文件。 - 包含OpenGL头文件:如`#include <GL/gl.h>`和`#include <GL/glu.h>`。 - 使用GLEW库:GLEW(OpenGL Extension Wrangler Library)是一个开源库,用于管理OpenGL扩展。通过引入GLEW,可以更方便地使用最新的OpenGL功能。 ##### 2. 图形数据加载 - **LoadBMP函数**:该函数用于加载位图文件(BMP格式),并将位图数据转换为OpenGL纹理格式。 ```c++ AUX_RGBImageRec* LoadBMP(CHAR* Filename); ``` - 参数说明: - `Filename`: 指向位图文件名的字符串指针。 - 返回值:返回一个指向`AUX_RGBImageRec`结构体的指针,该结构体包含了位图的数据。 - **LoadGLTextures函数**:此函数负责将多个BMP图像加载并转换为OpenGL纹理。 - 加载过程分析: - 为每个图像分配一个纹理ID,并将其绑定到OpenGL上下文中。 - 设置纹理参数,例如放大和缩小过滤器,以便在不同缩放级别下保持纹理质量。 - 使用`gluBuild2DMipmaps`函数生成Mipmap纹理,这是一种优化后的纹理,可以在不同的距离下提供良好的视觉效果。 ##### 3. 程序框架 - **全局变量**: - `HDC hDC = NULL;`:设备描述表句柄,用于指定绘图上下文。 - `HGLRC hRC = NULL;`:OpenGL渲染上下文句柄,用于OpenGL渲染操作。 - `HWND hWnd = NULL;`:窗口句柄,用于创建和操作窗口。 - `HINSTANCE hInstance;`:实例句柄,表示应用程序的实例。 - `bool keys[256];`:键盘状态数组,用于检测用户输入。 - `bool active = TRUE;`:活动标志,指示程序是否处于活动状态。 - `bool fullscreen = TRUE;`:全屏标志,指示程序是否处于全屏模式。 - **OpenGL纹理数组**: - `GLuint texture[7];`:定义了一个存储OpenGL纹理ID的数组,共包含7个纹理。 #### 三、总结 本文档提供的五子棋程序源代码涉及到的关键技术点主要包括OpenGL配置与使用、位图文件加载以及OpenGL纹理的创建和管理。这些技术点不仅对于理解和实现五子棋程序至关重要,同时也对学习OpenGL编程具有一定的参考价值。通过对这些技术细节的学习和实践,可以帮助开发者更好地掌握OpenGL的基本原理及应用方法。
#include "stdio.h"
#include "glew.h" // 包含最新的gl.h,glu.h库
// 包含OpenGL实用库
#include "glaux.h"
HDC hDC=NULL; // 窗口着色描述表句柄
HGLRC hRC=NULL; // OpenGL渲染描述表句柄
HWND hWnd=NULL; // 保存我们的窗口句柄
HINSTANCE hInstance; // 保存程序的实例
bool keys[256]; // 保存键盘按键的数组
bool active=TRUE; // 窗口的活动标志,缺省为TRUE
bool fullscreen=TRUE; // 全屏标志缺省,缺省设定成全屏模式
/***********************************新添的代码***********************************************************************************/
GLuint texture[7];
AUX_RGBImageRec *LoadBMP(CHAR *Filename) // 载入位图图象
{
FILE *File=NULL; // 文件句柄
if (!Filename) // 确保文件名已提供
{
return NULL; // 如果没提供,返回 NULL
}
File=fopen(Filename,"r"); // 尝试打开文件
if (File) // 文件存在么?
{
fclose(File); // 关闭句柄
return auxDIBImageLoadA(Filename); // 载入位图并返回指针
}
}
int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理
{
int Status=FALSE; // 状态指示器
AUX_RGBImageRec *TextureImage[7]; // 创建纹理的存储空间
memset(TextureImage,0,sizeof(void *)*7); // 将指针设为 NULL
// 载入位图,检查有无错误,如果位图没找到则退出
if (TextureImage[0]=LoadBMP("Data/board.bmp"))
{
Status=TRUE; // 将 Status 设为 TRUE
glGenTextures(1, &texture[0]); // 创建纹理
// 使用来自位图数据生成 的典型纹理
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
}
if (TextureImage[1]=LoadBMP("Data/black.bmp"))
{
Status=TRUE; // 将 Status 设为 TRUE
glGenTextures(1, &texture[1]); // 创建纹理
// 使用来自位图数据生成 的典型纹理
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data);
剩余23页未读,继续阅读
- k483733742012-11-18又复杂点的没有
- 粉丝: 4
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助