因为要学计算机图形学,所以要搭建 OpenGL 环境,而GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。
不过我吐了,我是在vs2010上配置的,配置了两次还是不行,一次是无法调用,一次出来了一堆未定义。
第三次我写这个博客记录每一步看看到底哪一步有问题。。。。。。终于是成功了

1.构建 GLFW:

(1)从GLFW官方网站下载源代码包:

网址:https://www.glfw.org/download.html

点击Source package即可下载,下载好解压即可。我下的版本是glfw-3.3.2

(2)下载安装CMake:

为什么要用CMake?
从源代码编译库可以保证生成的库是兼容你的操作系统和 CPU 的,而预编译的二进制文件可能会出现兼容问题(甚至有时候没提供支持你系统的文件)。提供源代码所产生的一个问题在于不是每个人都用相同的 IDE 开发程序,因而提供的工程/解决方案文件可能和一些人的 IDE 不兼容。所以人们只能从.c/.cpp和.h/.hpp 文件来自己建立工程/解决方案,这是一项枯燥的工作。但因此也诞生了一个叫做 CMake 的工具。
1、官网下载:https://cmake.org/


我下的是32位的,点击那个红圈的蓝字就下载了,只不过下载的速度有点。。。。。。
2、安装:
下载好就是一个安装文件,双击安装,除了下面这一步,安装的过程一直默认(安装路径找一个自己能找到的地方。。。。。。)直到安装完成。

3、启动 CMake
在CMake安装目录的bin文件夹下双击cmake-gui.exe启动CMake:

源代码目录我们选择 GLFW 的源代码的根目录,然后我们在根目录下新建一个 build 文件夹,选中作为目标目录。如图:

其他都不动,点Configure(设置)

然后会让我们选择工程的生成器,我用的vs2010,所以是选2010,其余默认
之后等待设置完成后:再次点击Configure(设置)

完成后再点Generate即可

(3) 编译

在刚才在glfw新建的build 文件夹里可以找到 GLFW.sln 文件,用 Visual Studio 2010 打开。因为 CMake 已经配置好了项目,所以我们直接点击 Build Solution(生成解决方案)
按钮,然后编译的库 glfw3.lib(注意我们用的是第 3 版)就会出现在glfw的src的Debug
文件夹内。

库生成完毕之后,我们需要让IDE知道库和头文件的位置。有两种方法:
(1)找到IDE或者编译器的/lib和/include文件夹,添加GLFW的include文件夹里的文件到IDE的/include文件夹里去。用类似的方法,将glfw3.lib添加到/lib文件夹里去。
(2)推荐的方式是建立一个新的目录包含所有的第三方库文件和头文件,并且在你的IDE或编译器中指定这些文件夹。我个人会使用一个单独的文件夹,里面包含Libs和Include文件夹,在这里存放OpenGL工程用到的所有第三方库和头文件。
我选的第一种,因为教程上说选第二种每次创建新项目时还得链接。不过我发现用了第一种也tm要链接。。。。。。。。

(4)来看看如何链接吧:

为了使我们的程序使用 GLFW,我们需要把 GLFW 库链接(Link)进工程。这可以通过在链接器的设置里指定我们要使用 glfw3.lib 来完成,但是由于我们将第三方库放在另外的目录中,我们的工程还不知道在哪寻找这个文件。于是我们首先需要将我们放第三方库的目录添加进设置。要添加这些目录(需要 VS 搜索库和 include 文件的地方),我们首先进入
Project Properties(工程属性,在解决方案窗口里右键项目):

然后选择 VC++ Directories(VC++ 目录)选项卡(如下图)。在下面的两栏(Include Directories 包含目录和 Library Directories 库目录)添加目录:把自己的目录(也就是include、和lib两个都加)加进去,让工程知道到哪去搜索。你需要手动把目录加在后面。

然后你需要在链接器的输入中的附加依赖项中输入glfw3.lib,这样链接就完成了

2.GLAD

到这里还没有结束,我们仍然还有一件事要做。因为 OpenGL 只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于 OpenGL 驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以任务就落在了开发者身上,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用。取得地址的方法因平台而异,代码非常复杂,而且很繁琐,我们还需要对每个可能使用的函数都要重复这个过程。幸运的是,有些库能简化此过程,其中 GLAD 是目前最新,也是最流行的库。
1.打开 GLAD 的在线服务
官网:https://glad.dav1d.de/

将语言(Language)设置为 C/C++,在 API 选项中,选择 3.3 以上的 OpenGL(gl)版本(我们的教程中将使用 3.3 版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为 Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先(暂时)忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。

点击下载这个zip 压缩文件,包含两个头文件目录,和一个 glad.c 文件。将两个头文件目录(glad 和 KHR)复制到你的 include 文件夹中,并添加 glad.c 文件到你的工程中(源文件下!!!!)。
用下面这段代码创建 main 函数,在这个函数中我们将会实例化 GLFW 窗口:
首先,我们在 main 函数中调用 glfwInit 函数来初始化 GLFW,然后我们可以使用 glfwWindowHint 函数来配置 GLFW。glfwWindowHint 函数的第一个参数代表选项的名称,我们可以从很多以 GLFW_开头的枚举值中选择;第二个参数接受一个整形,用来设置这个选项的值。如果你现在编译你的 cpp 文件会得到大量的 undefined reference (未定义的引用)错误,也就是说你并未顺利地链接GLFW 库

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_OPENGL_FORWARD_COMPAT, GL_TRUE);return 0;
}

最后来个实例,你会得到这样一个窗口

//下面两个头文件必须在include的各自的文件夹(glad和GLFW)下才行!!!
#include <glad/glad.h>
#include <GLFW/glfw3.h>void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;int main()
{// glfw: initialize and configure// ------------------------------glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);#ifdef __APPLE__glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif// glfw window creation// --------------------GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);if (window == NULL){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);// glad: load all OpenGL function pointers// ---------------------------------------if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;}    // render loop// -----------while (!glfwWindowShouldClose(window)){// input// -----processInput(window);// render// ------glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)// -------------------------------------------------------------------------------glfwSwapBuffers(window);glfwPollEvents();}// glfw: terminate, clearing all previously allocated GLFW resources.// ------------------------------------------------------------------glfwTerminate();return 0;
}// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);
}// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{// make sure the viewport matches the new window dimensions; note that width and // height will be significantly larger than specified on retina displays.glViewport(0, 0, width, height);
}

弄了一晚上终于成功了。。。。。。

构建GLFW详细全过程相关推荐

  1. Dockerfile 文件结构、docker镜像构建过程详细介绍

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  2. 手把手教会搭建网站详细全过程(从域名到网站部署)

    手把手教会搭建网站详细全过程(从域名到网站部署) 准备域名 解析域名 部署云服务器 登录宝塔界面 添加站点 上传WordPress包 WordPress编辑网站 域名备案 过年在家,闲的没有什么事做, ...

  3. python Django 连接mysql数据库创建表详细全过程

    python Django 连接mysql数据库创建表详细全过程 1,在数据库中新建一个要连接的数据库(在cmd命令行里登录数据库进行创建创建) mysql -u root -p**+密码** cre ...

  4. android 详细构建过程,Android构建模块详细步骤概述

    大家可能还记得,我们51CTO在一篇文章中介绍过有关Android模块的一些基本概念,相信大家应该可以对这些模块有一个深刻的认识了.在这里,我们会分步骤详细为大家讲解一下Android构建模块的相关知 ...

  5. 自底向上构建知识图谱全过程

    http://www.sohu.com/a/245246344_160850 阿里妹导读:知识图谱的构建技术主要有自顶向下和自底向上两种.其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据 ...

  6. 通俗讲解自底向上构建知识图谱全过程

    知识图谱的基础介绍,供学习参考. 转载自:https://mp.weixin.qq.com/s/7cBbtqvPQUVrLZUNDx8XDQ 知识图谱的构建技术主要有自顶向下和自底向上两种.其中自顶向 ...

  7. 七大步骤,详解预置算法构建模型的全过程

    摘要:针对有一定AI基础的AI初学者,ModelArts基于业界的主流引擎提供了预置算法,无需关注模型开发过程,直接使用预置算法对已有数据进行训练,并快速部署为服务.预置算法可用于物体类别和位置.图像 ...

  8. 详解自下而上构建知识图谱全过程(转载)

    导读:知识图谱的构建技术主要有自顶向下和自底向上两种.其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里.而自底向上构建,则是借助一定的技术手段,从公开 ...

  9. 一文揭秘!自底向上构建知识图谱全过程

    阿里妹导读:知识图谱的构建技术主要有自顶向下和自底向上两种.其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里.而自底向上构建,则是借助一定的技术手段, ...

最新文章

  1. mysql密码遗忘和登陆报错问题
  2. 支持取消操作和暂停操作的Backgroundworker
  3. 快速连续点击两次出现相同内容的解决方法
  4. js里面如何才能让成员方法去调用类中其他成员
  5. Python练习题:批量删除多个文件夹内的相同文件
  6. 六、推荐系统原理与应用
  7. CF932G-Palindrome Partition【PAM】
  8. python鼠标移动轨迹_鼠标的另一种选择,肯辛通轨迹球能否改变固有的使用习惯?...
  9. 力扣217.存在重复元素 使用多种方法
  10. win10远程计算机证书错误,win10系统下出现Wi-Fi证书错误的四种解决方案
  11. 爬虫GUI,结合OpenCV与Tk库来显示视频和图片
  12. 手机修改html离线网页内容,HTML5--离线web应用
  13. CS229 课程笔记一
  14. 五子棋AI第二篇 AB剪枝和启发搜索(Java)
  15. 南京大学LANDS组
  16. 谁是元宇宙的基础设施?数据中心助推元宇宙发展
  17. vs2017配置 opengl + glfw + glad 环境
  18. 蚂蚁金服区块链创新大赛
  19. IEC61850缩略语一览表
  20. 启发式算法greedy heuristic、贪心算法

热门文章

  1. Andrpid评测分析-安兔兔V6.0技术解…
  2. pvcreate 创建物理卷PV
  3. 行政大厅导航软件-无需安装APP的手机室内导航软件介绍
  4. 笔记本电脑重装win7系统后,网络适配器和WiFi图标都不见了
  5. 重庆电信强化线上渠道基础管理
  6. 华罗庚“统筹方法”的局限性——节约时间需要注意的问题
  7. 使用Redis做Mybatis的二级缓存
  8. bcp java,java bcp
  9. TI Am335LCD驱动
  10. rosparam和ROS参数服务