opengl学习-2vao和vbo(通义千问的例子)

复制代码
#include <GL/glew.h>
#include <GLFW/glfw3.h>

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

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

    // 使窗口的上下文成为当前线程的主上下文
    glfwMakeContextCurrent(window);

    // 初始化GLEW
    if (glewInit() != GLEW_OK) {
        return -1;
    }

    // 顶点数据
    GLfloat vertices[] = {
        -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // 位置, 颜色
         0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // 位置, 颜色
         0.0f,  0.5f, 0.0f, 0.0f, 0.0f, 1.0f  // 位置, 颜色
    };

    // 生成VBO
    GLuint vbo;
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    // 生成VAO
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    // 配置顶点属性
    glEnableVertexAttribArray(0); // 位置属性
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)0);

    glEnableVertexAttribArray(1); // 颜色属性
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (void*)(3 * sizeof(GLfloat)));

    // 解绑VAO和VBO
    glBindVertexArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    // 渲染循环
    while (!glfwWindowShouldClose(window)) {
        // 处理输入
        if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
            glfwSetWindowShouldClose(window, true);

        // 清屏
        glClear(GL_COLOR_BUFFER_BIT);

        // 绑定VAO并绘制
        glBindVertexArray(vao);
        glDrawArrays(GL_TRIANGLES, 0, 3);

        // 交换缓冲区并处理事件
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // 清理资源
    glDeleteVertexArrays(1, &vao);
    glDeleteBuffers(1, &vbo);

    // 终止GLFW
    glfwTerminate();
    return 0;
}

VBO 用于存储顶点数据,减少CPU和GPU之间的数据传输开销。

VAO 用于存储顶点属性的配置信息,简化渲染调用。

通过结合使用VAO和VBO,可以高效地管理和渲染复杂的3D模型。

相关推荐
硅基导游1 分钟前
linux系统与进程内存使用情况探测
java·linux·运维
LucaJu6 分钟前
Java + EasyExcel 实现单个接口导出多个Excel
java·excel
炸炸鱼.13 分钟前
LVS-DR 群集部署
前端·chrome·lvs
Ava的硅谷新视界15 分钟前
TypeScript 中用判别联合类型替代 instanceof 检查
前端·javascript·typescript
橘子编程15 分钟前
密码学完全指南:从基础到实战
java·python·密码学
ZC跨境爬虫17 分钟前
海南大学交友平台开发实战 day9(头像上传存入 SQLite+BLOB 存储 + 前后端联调避坑全记录)
前端·数据库·python·sqlite
J2虾虾27 分钟前
使用Idea当Jar包的反编译
java·intellij-idea·jar
落魄江湖行33 分钟前
基础篇六 Nuxt4 状态管理:useState 的正确用法
前端·vue.js·typescript·nuxt4
白露与泡影35 分钟前
2026 全新 Java 面试题汇总(含答案)
java·开发语言
likerhood37 分钟前
IDEA中创建和运行java项目的常见操作
java·ide·intellij-idea