GLFW+CMake 快速入门指南

GLFW+CMake 快速入门指南

GLFW-CMake-starterUse CMake to create a project with GLFW - Multi-platform Windows, Linux and MacOS.项目地址:https://gitcode.com/gh_mirrors/gl/GLFW-CMake-starter


项目介绍

该项目名为 GLFW-CMake-starter,由 juliettef 提供,旨在帮助开发者轻松地使用 CMake 构建包含 GLFW 的多平台应用程序。GLFW 是一个用于创建图形界面的应用程序框架,支持OpenGL、Vulkan等API,适用于Windows、Linux和MacOS操作系统。此starter项目简化了配置过程,特别适合CMake的新手。

项目快速启动

下载项目

首先,从GitHub克隆或下载本项目:

git clone https://github.com/juliettef/GLFW-CMake-starter.git

或者通过浏览器访问 GitHub页面,点击“Download ZIP”。

安装GLFW依赖

确保你有一个合适的GLFW版本。在项目根目录下,将GLFW库源码置于一个名为glfw的文件夹中,可以从GLFW官网获取最新版本。

构建与运行

打开终端,进入项目目录,并创建一个构建目录:

cd GLFW-CMake-starter
mkdir build && cd build

然后,使用CMake进行配置(对于MinGW环境需要指定编译器):

cmake ..

对于MinGW用户:

cmake -G "MinGW Makefiles" ..

最后,根据你的开发环境执行相应的构建命令:

  • 在Unix-like系统上(包括macOS和Linux):

    make
    
  • 对于Visual Studio用户,在生成解决方案后打开.sln文件并构建项目。

运行构建好的可执行文件来验证安装是否成功。

应用案例和最佳实践

使用GLFW-CMake-starter,你可以迅速开始OpenGL编程。以下是一个简单的示例应用,展示了如何设置一个窗口和绘制基本形状:

#include <GLFW/glfw3.h>
#include <glad/gl.h> // 确保正确配置glad以加载OpenGL函数指针

// 窗口变化回调
void framebuffer_size_callback(GLFWwindow* window, int width, int height);

int main()
{
    // 初始化GLFW
    if (!glfwInit())
        return -1;

    // 创建窗口
    GLFWwindow* window = glfwCreateWindow(640, 480, "GLFW Example", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // 加载OpenGL函数指针(如果你使用glad)
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        printf("Failed to initialize GLAD\n");
        return -1;
    }

    while (!glfwWindowShouldClose(window))
    {
        // 渲染命令放这里
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

// 实现窗口大小改变时的回调
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}

记得,使用OpenGL扩展时,你需要正确配置glad来管理函数指针加载,这也是项目的一部分配置工作。

典型生态项目

在GLFW和CMake的生态系统中,有很多基于它们建立的复杂游戏引擎和可视化工具。例如,许多现代的独立游戏和科研可视化软件都利用这些技术栈作为其图形渲染的基础。虽然GLFW-CMake-starter本身是入门级的,但它是构建更大型、功能丰富的应用的强大起点。开发者可以探索集成其他如ImGui(用于UI)、Assimp(模型导入)等开源库,进一步拓展项目的可能性。

通过实践上述步骤和理解基础原理,开发者能够快速踏入图形编程的世界,利用GLFW的灵活性和CMake的强大跨平台构建能力,创造属于自己的视觉应用。

GLFW-CMake-starterUse CMake to create a project with GLFW - Multi-platform Windows, Linux and MacOS.项目地址:https://gitcode.com/gh_mirrors/gl/GLFW-CMake-starter

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是使用 GLFW 和 GLAD 库绘制四边形的示例代码: ```c++ #include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); } void processInput(GLFWwindow* window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { glfwSetWindowShouldClose(window, true); } } 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, "Quad", nullptr, nullptr); if (window == nullptr) { std::cout << "Failed to create GLFW window" << std::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)) { processInput(window); glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); float vertices[] = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 0.0f }; unsigned int indices[] = { 0, 1, 3, 1, 2, 3 }; unsigned int VBO, VAO, EBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glGenBuffers(1, &EBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); glBindVertexArray(VAO); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glfwSwapBuffers(window); glfwPollEvents(); } glfwTerminate(); return 0; } ``` 在 `main()` 函数中,我们首先初始化 GLFW 库和 OpenGL 上下文。然后使用 GLAD 库初始化 OpenGL 函数指针。 在主循环中,我们首先处理输入事件,然后清空颜色缓冲区。接着定义四边形的顶点坐标和顶点索引,生成 VBO、VAO 和 EBO,绑定并填充数据。最后绘制四边形并交换缓冲区。 在 `framebuffer_size_callback()` 回调函数中,我们重新设置视口大小。 在 `processInput()` 函数中,我们检查 ESC 键是否被按下,如果是则设置窗口关闭标志,退出主循环。 这段代码使用了现代 OpenGL 的方式,使用了顶点缓冲对象、顶点数组对象和索引缓冲对象。同时也使用了 GLAD 库来加载 OpenGL 函数指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任玫椒Fleming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值