环境搭建和 hello world 程序(LearnOpenGL P1)"/>
OpenGL 环境搭建和 hello world 程序(LearnOpenGL P1)
文章目录
- OpenGL
- GLFW & CMake
- 链接到 Hello OpenGL!
- GLAD
- 运行测试
OpenGL
什么是 OpenGL,OpenGL 能做什么在此不再赘述
运行 OpenGL 需要准备的有:
- CMake:用于执行编译
- VS:我使用的是 Visual Studio 17 2022 版本
- GLFW:C语言库,用 VS 2022 编译、链接
- GLAD:OpenGL 的驱动层,同样需要和 VS 编译链接
GLFW & CMake
从 .html 下载 GLFW 的源码
CMake 需要绑定一个 c语言 编译器,这里选择你安装的 VS 版本即可
然后解压 glfw 源码到一个文件夹
在 CMake 中选择 glfw 的源码地址和构建输出目标地址
在下面点击 Configure 和 Generate,就可以编译出 sln 工程了
随后使用 VS 2022 打开 GLFW.sln,生成解决方案,构建即可~
- 构建结束后在这个路径找到 glfw3.lib,这就是我们要的 GLFW 库文件了
- 回到 glfw 源代码文件夹,这里有个 include 文件夹,也是我们需要关注的文件
为了方便我们的 OpenGL 项目使用,我们找个地方创建一个文件夹,把东西放进去,include 直接复制到文件夹里,再创建一个 lib 文件夹把刚刚的 glfw3.lib 放进去~
链接到 Hello OpenGL!
右键点击我们的项目名称(在解决方案下面)打开属性
在这里添加:
- 包含目录(对应 include)
- 库目录(对应 lib)
在这里加上 glfw3.lib 和 opengl32.lib,别把分号忘记掉了
GLAD
GLAD 的开源生成页面在:/
选好这两项,在下面点击生成即可
这就是结果源码,下载下来,把 include 导入即可
需要注意的是,src 不是库,把里面的 glad.c 放在项目里面就可以了
运行测试
然后创建一个 cpp 文件到源文件分类中,导入这两行,没问题就成功了~
实现了base.h & base.cpp,把 OpenGL 的一部分数据解耦出去了,main.cpp 负责调用运行
#include "base.h"/// <summary>
/// 初始化 glfw 并配置参数
/// </summary>
void initGlfw() {glfwInit();glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
}/// <summary>
/// 创建窗口对象, 存放了窗口相关数据
/// </summary>
/// <returns></returns>
GLFWwindow* createWindowObj() {// todoGLFWwindow* window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_LABEL, NULL, NULL);if (window == NULL){std::cout << "Failed to create GLFW window" << std::endl;glfwTerminate();return (GLFWwindow*)-1;}glfwMakeContextCurrent(window);return window;
}int initGlad() {// todo -> glfwGetProcAddressif (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "Failed to initialize GLAD" << std::endl;return -1;}return 1;
}void initViewport(GLFWwindow* window) {glViewport(0, 0, 800, 600);glfwSetFramebufferSizeCallback(window, [](GLFWwindow* window, int width, int height) {glViewport(0, 0, width, height);});
}void mainThread(GLFWwindow* window) {while (!glfwWindowShouldClose(window)){// 检测输入[](GLFWwindow* window){if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)glfwSetWindowShouldClose(window, true);};// 渲染指令glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);// 检查并调用事件, 交换缓冲glfwSwapBuffers(window);glfwPollEvents();}glfwTerminate();
}
更多推荐
OpenGL 环境搭建和 hello world 程序(LearnOpenGL P1)
发布评论