OpenGL开发环境搭建

前言:之前同事说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;
}

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

猜你喜欢

转载自blog.csdn.net/zjz520yy/article/details/81334722
今日推荐