小白的OpenGL3.3自学之路(1)OpenGL3.3配置
心血来潮
本来写Qt跟Opencv的界面写的正好,前段时间师兄在搞四角面片跟消隐的问题。我也被拉去当壮丁。只是师兄是用occ搞的,我懒得学occ。加上以前也没系统学过opengl。于是趁此机会好好自学了一下opengl。
关于OpenGL
OpenGL有两种模式,立即渲染模式跟核心模式。即固定管线与可编程管线,我只推荐大家学习核心模式也就是可编程管线。用的是OpenGL3.3的版本。主要学习方式无非就是跟着LearnOpenGL CN然后再自己摸索。这里附上LearnOpenGL CN的网址:https://learnopengl-cn.github.io/
关于如何配置OpenGL3.3
老规矩先下载GLFW。官网有两种版本。一种是预编译版。一种是源码。如下图:
那个glfw-3.2.1.bin.WIN64就是预编译版本。也就是别人帮你编译好了你直接拿来用即可。但是我肯定是自己用源码编译的x64版本。我从来不用x86版本。至于怎么用cmake编译glfw的源码我就不说了,看我之前的博客。写过太多了。懒得写了。反正最后我编译好的都会上传到群文件里面。有需要的自己加群下。群号是736854977。
可能你会问之前写opengl的程序时都有什么gl,glew,freeglut等等。但是不管是glut还是freeglut还是glew都太老了。太过时了。现在都流行用GLAD库。
怎么配置glad库之前Learn OpenGL CN里面都有。我就不细细说了。下面直接上最终opengl的文件夹:
好,接下来就是如何在vs里面加opengl3.3了。
首先创建一个空项目然后添加一个源文件。
然后再添加一个现有的glad.c到源文件里面。
然后在附加包含目录里面把include给加进去。
然后在附加库目录里面把lib给加进去。
最后在附加依赖项里面加入这两个:opengl32.lib,glfw3.lib
到此就配置完了。下面我们来测试一下看是否配置成功。
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;
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(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);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
while (!glfwWindowShouldClose(window))
{
processInput(window);
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)
{
glViewport(0, 0, width, height);
}
结果如下,出来了一个黑色的窗口。成功!