一.下载glfw,glad并编译
1.glfw个人理解就是对底层opengl的一些基本接口的封装,提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文、定义窗口参数以及处理用户输入。glfw的下载地址:Download | GLFW,下载完成后,打开cmake,设置工程路径和编译路径,生成sln工程,选择x86进行编译,得到库3.3.9版本glfw3.lib。
2.glad,是一个开源的库,由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。所以,我们为了解决运行时去正确调用opengl的接口,我们需要用到glad。封装的接口就是一个对opengl函数指针的封装。打开GLAD的在线服务(glad.dav1d.de),将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本。之后将模式(Profile)设置为Core,并且保证选中了生成加载器(Generate a loader)选项。现在可以先(暂时)忽略扩展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。
然后下载glad.zip。
二. Qt 配置相关库
1.glad的配置
2.glad.pri
INCLUDEPATH += $$PWD/include
SOURCES += \$$PWD/src/glad.c
3.glfw3.3.9配置
4.glfw.pri
INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -lglfw3
三.搭建QT工程。我们创建一个非QT的工程,看看相关的依赖库有哪些?
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qtinclude($$PWD/../../thirdparty/glad/glad.pri)
include($$PWD/../../thirdparty/glfw-3.3.9/glfw.pri)LIBS += -lopengl32 -lkernel32 -luser32 -lgdi32 -lshell32SOURCES += \main.cpp
图中链接的相关库,opengl32,kernel32,user32,gdi32,shell32解决你编译发生的所有错误。vs下开发默认是继承的这些链接库,不用链接。
四.创建一个opengl窗口。
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
using namespace std;void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);
}int main()
{// glad加载if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "failed to init glad!" << std::endl;}// 告知opengl我们使用的版本和渲染模式glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// mac 下需要这句话glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);// end// 创建opengl窗口GLFWwindow* window = glfwCreateWindow(800, 600, "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);// 等待用户关闭窗口while(!glfwWindowShouldClose(window)){// 双缓冲交换glfwSwapBuffers(window);// 响应各种交互事件glfwPollEvents();}// 释放资源glfwTerminate();return 0;
}
五.工程代码地址:learningOpengl: 一起学习opengl
六.学习地址:主页 - LearnOpenGL CN