【OpenGL】GLFW配置

来源:互联网 发布:淘宝一元秒杀在哪里 编辑:程序博客网 时间:2024/06/05 08:51

说在前面

能通过OpenGL搜过来的大多不是作业要求就是对图形学感兴趣的。OpenGL大家都有所了解,一般认为是一个通用的图形图像API。而实际上其是一个规范,严格规定函数的执行,其中的实现则是OpenGL自己定义的。

本人大学本科专业课上教授的计算机图形学课程。但是其实验指导中使用的是glut库,让我们来看看官网是怎么说的:

这里写图片描述

……好吧┑( ̄Д  ̄)┍

然后后来上了一门游戏课之后,老师给我们推荐了GLFW库。网上大多数的环境配置还是glut库,所以这里稍微写一下这两天配环境的过程。

参考教程:http://learnopengl-cn.readthedocs.io/zh/latest/ 当中的创建窗口教程

非常好的一个网站,之前好几个关键技术点都是在这里获取,真的非常感谢他们!我这里的博客也只是在学习中自己的一些备忘而已。配环境的话大家参考这个教程即可,如果遇到一些奇怪的坑就可以回头再来看看我写的备忘……主要就是在这个基础上说点自己的心得。

配置说明&补充

1. 编译源代码

这里原教程写的很清楚,从官网上可以下载:http://www.glfw.org/

p.s. 官网上提供了给windows用户编译好的lib下载的链接,然而之前尝试了很多次都失败了。建议大家还是下载源代码来进行编译,也就是官网进去的第一个下载链接。

我这里下载的是GLFW 3.2。然后使用CMAKE进行生成visual studio的工程即可,我这里使用的是Visual Studio 2013,其在CMAKE会有一个内部版本号14,不用虚,看到2013即可。其他步骤按教程来。

用vs打开编译之后,生成的大概只有个lib文件吧……它会出现在src/debug中(在教程里也说到,但是很多粗心的同学说不定和我一样)。

2. 使用GLFW库

还是针对vs用户,关于头文件引用,教程中给出的是在工程中配置VC++ Directories,我以前则是直接把它和lib都扔到vs的安装目录里面去。看了教程觉得单独出来很重要,否则放到别人电脑上就没法跑真的好尴尬。的确这样子能够很好地管理自己的代码,还可以做一下全平台的不同库的链接……(想多了)

不过在链接lib库的时候我是使用了下面的代码直接来引入的:

#pragma comment (lib, "libs/glfw3.lib")

这样子可以把根目录下libs目录下的库文件直接引进来,不需要在工程属性中进行配置。

3. 看看能不能跑

拼凑了一下教程的代码,如下若是能跑出一个不是黑色的窗口就已经是配好了。

#include "GL/glew.h"#include "GLFW/glfw3.h"#include "glm/glm.hpp"#include <iostream>#pragma comment (lib, "opengl32.lib")#pragma comment (lib, "libs/glfw3.lib")#pragma comment (lib, "libs/glew32d.lib")int main(){    glfwInit();    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);    if (window == nullptr)    {        std::cout << "Failed to create GLFW window" << std::endl;        glfwTerminate();        return -1;    }    glfwMakeContextCurrent(window);    while (!glfwWindowShouldClose(window))    {        // 检查事件        glfwPollEvents();        // 在这里执行各种渲染操作        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);        glClear(GL_COLOR_BUFFER_BIT);        //交换缓冲区        glfwSwapBuffers(window);    }    glfwTerminate();    return 0;}

可以看到GLFW的代码结构和glut真的是差的十万八千里(大概gl库部分还是一样的吧)。

我这里还配了glew库(用于shader等功能)和glm库(用于数学运算)。后面用到的时候会再提。

0 0
原创粉丝点击