OpenGL环境搭建:vs2013+freeglut2.8.1+glew1.7.0+gltools

前言:之前同事说OpenGL环境贼难搭建,搭建了好多次都没成功过。恰巧最近自己也在学习OpenGL超级宝典,开发环境这块必须得支持,否则往后学习就是光看不练假把式了。于是今天特意花了一上午时间上网搜索了相关资料,搭建过程也不是一帆风顺,但好在最终还是搭建完毕了,可以愉快的吃个中饭了。

Windows平台搭建篇
**方式一:**采用vs2013+freeglut-2.8.1+glew-1.7.0+gltools进行搭建。搭建流程如下:
1.下载glew-1.7.0:根据自己电脑操作系统位数来选择下载64位还是32位版本的glew。这里还需要把glew的源码下载下来,因为后面的gltools制作静态库时需要用到该源码文件。下载如图所示:
这里写图片描述
2.安装glew-1.7.0:由于我电脑是64位操作系统,所以我下载的是glew-1.7.0-win64.zip。下载下来后解压该zip文件,并进行以下操作:
一.将位于include文件夹下的GL文件夹复制到“vs2013安装根目录\VC\include“下。如图所示:
这里写图片描述
二.将位于lib 文件夹下的 .lib 文件复制到“vs2013安装根目录\VC\lib“下。如图所示:
这里写图片描述
三.将位于bin 文件夹下的 .dll 复制到 C:\Windows\System32目录中,如果是64位系统则放在SysWOW64目录。如图所示:
这里写图片描述
3.下载freeglut2.8.1。将下载完毕的freeglut2.8.1进行解压,并将位于include文件夹下的GL文件夹复制到“vs2013安装根目录\VC\include“下。如图所示:
这里写图片描述
4.生成freeglut静态库:生成流程如下所示:
一.用vs2013打开\freeglut-2.8.1\VisualStudio\2012\freeglut.sln项目文件。如图所示:
这里写图片描述
这里写图片描述
二.将解决方案配置设置成Release_Static编译模式。如图所示 :
这里写图片描述
此时配置属性也会自动调成Release_Static编译模式。如图所示:
这里写图片描述
三.生成解决方案,此时会在freeglut-2.8.1\lib\x86生成一个freeglut_static.lib文件。最后将生成的freeglut_static.lib文件复制到“vs2013安装根目录\VC\lib“目录下。流程如图所示:
这里写图片描述
这里写图片描述
5.生成GLTools静态库:必须在glew和freeglut配置完毕后才能进行GLTools静态库的生成。生成过程如下所示:
一.下载GLTools源码工程:可以使用vpn+svn从http://oglsuperbible5.googlecode.com/svn/trunk下载。也可以在csdn上面下载OpenGL超级宝典第五版源码。里面都包含有GLTools源码工程。
二.用vs2013新建一个win32静态库工程(它在Win32项目下),工程名为 GLTools ,记得去掉预编译头这个选项。如图所示:
这里写图片描述
三.将glew-1.7.0源代码工程下的src目录中的glew.c文件以及GLTools源码工程下的src目录中的文件(除了glew.c文件)添加到当前GLTools静态库工程中。如图所示:
这里写图片描述
这里写图片描述
这里写图片描述
四.将GLTools源码工程下的include目录中头文件(除了GL目录下面的glew头文件)复制到“vs2013安装根目录\VC\include“下,否则GLTools静态库工程中的源码文件就会报找不到头文件错误。流程如图所示:
这里写图片描述
五. 在项目 -》属性 -》C/C++ -》预处理器 -》预处理器定义中添加 _CRT_SECURE_NO_WARNINGS。然后编译生成,编译成功后会在工程Debug目录下生成 GLTools.lib静态库文件。最后将该GLTools.lib复制到“vs2013安装根目录\VC\lib“下。流程如图所示:
这里写图片描述
这里写图片描述
这里写图片描述
6.运行测试工程:用vs2013创建一个Win32控制台程序。测试流程如下:
一.在项目 -> 属性 -> 链接器 -> 输入 -> 依赖项中添加gltools.lib,glew32s.lib并在忽略特定默认库中添加 LIBCMT MSVCRT。如图所示:
这里写图片描述
这里写图片描述
二.将超级宝典第五版中的示例代码src\Chapter02\Triangle\Triangle.cpp添加到工程中,直接编译运行成功后,即可得到一个三角形图案。
核心代码如下:

#include "stdafx.h"
#include <GLTools.h>	// OpenGL工具箱:包含常用的加载库,如glew等。
#include <GLShaderManager.h>	// GLTools管理着色器类,用来对内建着色器以及自定义着色器进行管理。

#ifdef __APPLE__
#include <glut/glut.h>	// 苹果平台下包含有gui的OpenGL操作库glut
#else
#define FREEGLUT_STATIC		// windows平台下包含的gui的OpenGL操作库freeglut
#include <GL/glut.h>
#endif

// 批处理对象,用来批次操作数据
GLBatch batch;
// 着色器管理器对象
GLShaderManager shaderManager;

// glut大小变化回调函数
void ChangeSize(int width, int height)
{
	// 视口随着glut窗口的改变而改变
	glViewport(0, 0, width, height);
}

// glut界面渲染回调函数
void RenderScene()
{
	// 用指定颜色缓冲区的清除颜色来清除指定的缓冲区
	// GL_COLOR_BUFFER_BIT表示颜色缓冲区
	// GL_DEPTH_BUFFER_BIT表示深度缓冲区
	// GL_STENCIL_BUFFER_BIT表示模板缓冲区
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
	// 使用红色来填充内建的着色器GLT_SHADER_IDENTITY
	GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
	shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
	// 使用批处理对象利用内建着色器GLT_SHADER_IDENTITY一次性的渲染批处理对象中的数据
	batch.Draw();
	// 将离屏缓冲区中绘制的颜色交换到视图缓冲区中
	glutSwapBuffers();
}

// 初始化渲染环境对象:由于已经在glut创建窗口时内部创建了一个该对象,所以此处就不在额外创建了。
void SetupRenderContext()
{
	// 设置颜色缓冲区的清空颜色为蓝色
	glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
	// 初始化内建着色器
	shaderManager.InitializeStockShaders();
	// 准备三角形顶点数组
	GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
	0.5f, 0.0f, 0.0f,
	0.0f, 0.5f, 0.0f
	};
	// 初始化批处理对象:按照三角形处理并有三个顶点
	batch.Begin(GL_TRIANGLES, 3);
	// 填充数据到批处理对象中
	batch.CopyVertexData3f(vVerts);
	// 结束批处理对象设置
	batch.End();
}

// 文件主入口
int main(int argc, char* argv[])
{
	// 设置GLTools当前工作目录:
	// windows平台默认是当前文件所在目录为工作目录。
	// mac平台默认是App Bundle的Resource目录为当前工作目录。
	gltSetWorkingDirectory(argv[0]);

	// 初始化glut库
	glutInit(&argc, argv);
	// 设置glut显示模式:
	// GLUT_DOUBLE表示双缓冲区(离屏缓冲区用来绘制图形,视图缓冲区用来显示图形。)
	// GL_RGBA表示颜色模式
	// GL_DEPTH表示深度缓冲区,用来进行深度测试
	// GL_STENCIL表示模板缓冲区
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
	// 设置glut窗口大小
	glutInitWindowSize(800, 600);
	// 创建glut窗口,此时内部自动创建一个OpenGL Render Context对象,也叫做OpenGL渲染环境对象。
	glutCreateWindow("Triangle");
	// 设置glut窗口大小变化回调
	glutReshapeFunc(ChangeSize);
	// 设置glut窗口渲染回调
	glutDisplayFunc(RenderScene);

	// 初始化glew加载库:glew包含有对opengl所有接口函数指针调用以及关联的枚举和变量等。
	GLenum err = glewInit();
	if (err != GLEW_OK)
	{
		// 初始化glew失败
		fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
		return 1;
	}

	// 初始化渲染对象,只有该对象才能对opengl库进行调用
	SetupRenderContext();
	// 阻塞模式开始glut主循环:此时就会按照上面设置好的数据和回调进行处理glut
	glutMainLoop();
	// 正常结束
	return 0;
}

运行结果如图所示:
这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值