什么是OpneGL
Open Graphics Library (OpenGL) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve hardware-accelerated rendering.
总的来说,OpenGL 就是一个应用程序接口(API),用来帮助我们与GPU交互,来使用硬件加速渲染图形。OpenGL只是一个规范,不同的显卡厂商有不同的实现,但这无关紧要,只要用起来相同就行了。值得一提的是,OpenGL 是无需下载的,系统里已经有这个库了(opengl32.lib, opengl64.lib for Windows)。建议将显卡驱动更新到最新
但是,只有 OpenGL 是不够的,原因大致有二:
- 1.OpenGL 本身提供的 API 比较底层,不便于使用,我们需要一个更高层次的封装。
- 2.OpenGL 并没有提供创建 context,管理窗口以及处理用户输入等机制。
安装库
需要安装:GLFW、GLEW/GLAD
GLEW和GLAD都是一样的库,下载其中一个即可
GLFW
是专门针对OpenGL的C语言库,GLFW是一个专门用于处理窗口创建和事件循环的库,它能够兼容各种操作系统,提供了一个简单的API来处理窗口相关的操作,如创建、销毁、调整大小等。GLFW负责创建窗口、处理窗口相关的事件(如键盘和鼠标输入),并提供一个OpenGL上下文供程序使用。
GLEW
全称OpenGL Extension Wrangler Library,是一个用于管理OpenGL扩展功能的库。由于OpenGL只有函数声明而没有实现,所以不同的显卡生产商会提供自己的实现。这就需要在编写程序时判断哪些函数是否可用,非常麻烦。而GLEW库则将这些问题简化,使得各个版本的OpenGL函数像原生函数一样可以直接调用。
GLAD
glad是glew的升级版,专门加载OpenGL的函数指针,也可以只安装glad,无需配置glew
其他库
下载
GLEW
步骤一:选择官网的Binaries
下载
步骤二:跳转后,等待即可下载
GLFW
步骤一: 选择官网的Download页面,主页是源码,需要自己编译
步骤二: 选择对应平台: 这里选择Windows平台,选择32位(64位可能有些平台不支持)
步骤三: 将下载的文件解压,可看到对应版本的
GLAD
步骤一: 在官网选择对应的信息用来生成库, 最后选择右下角的Generate按钮生成库文件
步骤二: 点击Generate后可以查看生成的库文件, 选择glad.zip进行下载
步骤三: 将下载的文件解压,可看到和官网生成的库文件一致
到这里OpenGL所需要的库就下载好了
配置
这里以Visual Studio2017为例,Visual Studio都差不多,其他编译器没试过,主要是将OpenGL库链接到项目中,可以分开链接(GLFW和GLAD);也可以专门一个文件夹将GLFW和GLAD的include、lib放一起(这里以该方式)
步骤一
将GLFW和GLAD下载的文件放置到同一个文件夹下
GLFW文件:include文件->GLFW文件
GLAD文件: include文件->glad文件和KHR文件
也可以把文件里的头文件都提取出来,不用单独一个文件,只不过头文件引入多个文件名,取决于个人的习惯
#include <glad\glad.h> //这个是单独的文件夹
#include <GLFW\glfw3.h>
#include <glad.h> //这个是所有的头文件放置在一起
#include <glfw3.h>
步骤二
将lib库也和上面一样,GLAD没有lib库,所以不用分类,直接lib文件即可
GLFW文件:选择对应的版本(这里是Visual Studio2017)->lib文件
配置好的文件
步骤三:
将库文件链接到Visual Studio项目中
步骤一
创建一个C++空项目,控制台项目即可
步骤三
将OpenGL头文件链接到项目里,即项目里的GLFW文件
链接头文件:项目->属性->C/C++->常规->附加包含目录(记的上面的平台是: 活动(Win32))->在附加包含目录里面添加文件地址(可直接复制地址,也可选择文件夹)->点确定,应用。
链接lib库:项目->属性->链接器->常规->附加库目录->选择配置的lib文件->点确定,应用。
添加库依赖项:项目->属性->链接器->输入->opengl32.lib glfw3.lib->点确定,应用。
到这所有库以链接完毕,开始测试OpenGL代码
链接头文件
链接lib库
添加库依赖项
步骤四
输入OpenGL代码,生成窗口
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
int main() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow *window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL) {
cout << "Failed to create GLFW window" << endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while (!glfwWindowShouldClose(window)) {
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
生成解决方案错误
解决办法:将下载的glad文件->src->glad.c导入到项目的源文件夹(用vs导入,直接放到文件夹不会识别)
重新生成解决方案即可
运行
生成两个窗口:控制台窗口和OpenGL窗口,代表完成OpenGL环境配置了