OpenGL学习(一)——OpenGL 初始化环境配置(VS2019+GLFW+GLAD)
目录
1.安装CMake
2.下载GLFW
3.编译GLFW
4.下载GLAD
二、环境搭建
1.第一个工程
2.链接
三、测试程序
一、准备工作
1.安装CMake
进入CMake官网的 下载页面下载适用于自己操作系统平台的对应版本,这里下载的是:
下载完毕后直接点击下一步即可完成安装。
2.下载GLFW
进入CMake官网的 下载页面下载适用于自己操作系统平台的对应版本,这里下载的是Windows 64位的预编译版本:
解压后在主目录里新建一个build文件夹
3.编译GLFW
打开CMake,生成目标工程,步骤如图:
然后可以看到build文件夹下生成的工程文件,用VS2019打开GLFW.sln
右键INSTALL>重新生成
然后查看上面提到的生成include、lib的文件夹CLFW,发现编译后的文件已经生成。
4.下载GLAD
进入GLAD官网的 在线服务,选择适用于自己操作系统平台的对应版本,这里选择的是:
点击压缩包下载
二、环境搭建
新建一个OpenGL(自己命名)文件夹,创建子文件夹include、lib、src,如图
将GLFW\include文件夹下的GLFW文件夹复制到OpenGL\include文件夹下,lib文件夹下的glfw3.lib文件复制到OpenGL\lib文件夹下;同理,将下载后的GLAD\include文件夹下的glad、KHR文件夹复制到OpenGL\include文件夹下,将GLAD\src文件夹下的glad.c文件复制到OpenGL\src下。
1.第一个工程
打开VS2019,新建一个空白项目
2.链接
步骤如下:
1.打开项目属性页:
2.在VC++目录下在包含目录中将OpenGL\include目录添加进去,在库目录中将OpenGL\lib目录添加进去,如图
3.在链接器>输入下的附加依赖项将opengl32.lib、glfw3.lib添加进去,最后点击应用,如图
4.将OpenGL\src下的glad.c复制到项目的源文件下,如图
三、测试程序
在源文件下新建test.cpp测试程序,将以下代码复制进去,若能正常运行则环境配置成功。
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
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);
#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);
}
注意:最终运行时,要选择链接时候的位数