GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入,
从网址 下载页 下载源代码(虽然提供了编译完成的二进制文件,但仍建议手工下载源代码通过CMake编译)
需要通过CMake来将下载得到的源代码建立工程文件再得到与机器使用的二进制文件
Cmake下载
选择自己需要的版本即可。
之后更具提示进行安装即可。
GLAD可以简化使用调用OpenGL函数的操作
GLAD在线服务
选择完成相关信息后点击右下角的GENERATE即可。
在相关下载、安装完成后,将得到如下内容
(1)glfw压缩包,内有一个文件夹。
(2)CMake工具
(3)glad压缩包,内含两个文件夹 include, src两个文件夹。
接下来需要将这些内容进行简单的组装
在进行以下步骤前,请建立一个你自己的文件夹(我这里是OpenGL),此文件夹中建立两个文件夹 include 和 lib。还可在建立一个other文件夹用来存储其他的一些文件,便于以后建立工程。下文我就以OpenGL文件夹称呼。
建立一个空文件夹,将glfw.zip内的文件夹解压到这里。打开CMake工具(直接使用它的GUI来进行工程文件的创建)
第一个选择你解压得到的文件夹
第二个选择拟创建工程的位置
点击左下角的Configure进行设置
第一项选择你拥有的IDE版本,如果选择的不存在可能导致报错。第二项与你本身机器的架构有关,我这里选择的是x64(比较疑惑的是没有x86版本)选择完成后点击Finish,再点击Configue,Generate即可(中间变为白色)。(如果出现报错请检查各项选择是否与你的机器匹配)
这里就得到了相应的解决方案。
进入你的VS进行编译即可。建议把Debug和Release版本都编译出来。注意你的解决方案平台。
可在工程文件的src文件夹下找到编译的到的两个文件夹。在完成以上内容后我们需要将glfw需要的内容添加到本部分提到的OpenGL文件夹中。1、将初始解压得到的glfw文件夹内的include内的GLFW文件夹添加到OpenGL文件夹的include中。2、将提到的Debug文件夹和Release文件夹添加到lib文件夹中。(如果需要多个不同版本的可添加到other中)
在完成上一步后,我们来解决glad的问题。在下载完成后,我们得到的是一个glad压缩包,将include文件夹中的内容解压到OpenGL的include文件夹中,将src文件夹下的glad.c文件添加到lib文件夹中。完成以上两步后,我们得到的OpenGL文件夹如下。
Release 和 Debug 文件夹
到此我们需要的依赖就全部得到了
首先,进入测试 -> 调试属性 -> VC++目录
编辑包含目录和库目录,选择路径就是上一步提到的OpenGL文件夹
lib内需要具体到Release还是Debug
打开 链接器->输入->附加依赖项输入 opengl32.lib; glfw3.lib;
在解决方案资源管理器内选择源文件,右击添加,现有项,选择之前存放在lib文件家中的glad.c文件
到此为止环境就搭建完成了,接下来我们测试一下
//OpengGL's Hello World
#include
#include
#include
using namespace std;
void processInput(GLFWwindow* window);
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 800;
//1、在VC++目录添加 Opengl的 include 和 lib
//2、在连接器添加 glfw.lib
//(有可能是glfw3dll.lib, 则需要在工程中同样添加.dll文件,记得把解决方案平台和配置一致)
//3、在源代码中添加 glad.c文件
//GLFW专注用于创建窗口,封装的是创建窗口相关的部分,简化创建窗口的过程
//GLAD封装调用OpenGL库中函数,简化操作
int main()
{
//窗口初始化部分
glfwInit(); //初始化glfw窗口
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);//OPENGL主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//OPENGL子版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //使用OpenGL的核心模式 (可编程渲染管道)
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);//长,宽,名称 UnKnown, Unknown
//异常处理
if (window == NULL)
{
cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}//处理完毕
glfwMakeContextCurrent(window); //将窗口的上下文设置为当前线程的上下文
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //缓冲回调
//循环使程序关闭前能够持续渲染
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
while (!glfwWindowShouldClose(window))
{
processInput(window);
//重新渲染
//这里采用的是双渲染,在下一帧渲染完成前由前一个渲染驻扎在前台,后部完毕后直接替换,防止逐个渲染实时替换导致的画面频闪
glClearColor(0.1f, 0.2f, 0.6f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
//检查是否有事件发生
glfwPollEvents();
}
glfwTerminate();
return 0;
}
//外界输入相应
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
//窗口回调
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);
//前两个参数为起点未知,后面为宽度高度
}
建立一个C++源文件,拷贝代码到其中。运行项目即可。
建立了如下所示的窗口说明环境搭建成功了。
检查创建解决方案的版本与机器上拥有的是否匹配,检查创建的平台是否匹配。
1:检查链接器的两个依赖是否添加。
2:检查平台是否匹配
3:检查glad.c是否添加
为大家提供百度网盘的版本。
网盘下载
提取码:glgl