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模型。

相关推荐
2601_949970693 分钟前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
知守观26 分钟前
设计模式实战:从真实老项目中看标准模板方法与工厂的落地
java·spring·设计模式
独隅32 分钟前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
SL_staff1 小时前
JVS私有化文档系统上线避坑指南:5大运维与业务协同断点及检测加固实践
java·开源·全栈
风骏时光牛马2 小时前
后端服务接口开发与性能优化
前端
kyriewen2 小时前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师2 小时前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端
IT_陈寒2 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
FinelyYang3 小时前
考试系统简答题 AI 阅卷:覆盖度驱动、异步评分与人机协同落地实践
java·大数据·人工智能