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

news/2024/11/8 0:05:41/
#include <GL/glew.h>
#include <GLFW/glfw3.h>int main() {// 初始化GLFWif (!glfwInit()) {return -1;}// 创建窗口GLFWwindow* window = glfwCreateWindow(640, 480, "VAO and VBO Example", NULL, NULL);if (!window) {glfwTerminate();return -1;}// 使窗口的上下文成为当前线程的主上下文glfwMakeContextCurrent(window);// 初始化GLEWif (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  // 位置, 颜色};// 生成VBOGLuint vbo;glGenBuffers(1, &vbo);glBindBuffer(GL_ARRAY_BUFFER, vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);// 生成VAOGLuint 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和VBOglBindVertexArray(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);// 终止GLFWglfwTerminate();return 0;
}

VBO 用于存储顶点数据,减少CPU和GPU之间的数据传输开销。
VAO 用于存储顶点属性的配置信息,简化渲染调用。
通过结合使用VAO和VBO,可以高效地管理和渲染复杂的3D模型。


http://www.ppmy.cn/news/1545201.html

相关文章

docker file 精简规则

在编写 Dockerfile 时&#xff0c;精简规则不仅有助于减小镜像大小&#xff0c;还能提高构建速度和可维护性。以下是一些常见的精简 Dockerfile 规则&#xff1a; 1. 尽量合并 RUN 指令 每个 RUN 指令会产生一个新的镜像层&#xff0c;因此多个命令可以合并为一个 RUN 指令&a…

macos中安装和设置ninja

1、在安装ninja的过程中需要先安装re2c(github地址&#xff1a;https://github.com/skvadrik/re2c): git clone https://github.com/skvadrik/re2c.git&#xff08;也可直接下载最新的release压缩包&#xff0c;并解压。下载地址&#xff1a;https://github.com/skvadrik/re2c…

爬虫下载网页文夹

爬虫下载网页pdf文件 import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin from urllib.parse import urljoin, unquote from tqdm import tqdm # 设置网页的URL base_url "http://119/download/dzz/pdf/"# 创建保存文件的…

Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

LLaMA系列一直在假装开源...

伙伴们&#xff0c;很奇怪~ 关于LLM的开源与闭源模型的竞争又开始愈发激烈。 众所周知&#xff0c;开源模型以其开放性和社区驱动的特点受到一部分用户的青睐&#xff0c;而闭源模型则因其专业性和性能优化被广泛应用于商业领域。由于大模型最近2年的突然兴起&#xff0c;开源…

桑基图在医学数据分析中的更复杂应用示例

桑基图&#xff08;Sankey Diagram&#xff09;能够有效地展示复杂的流动关系&#xff0c;特别适合用于医学数据分析中的多种转归和治疗路径的可视化。接下来&#xff0c;我们将构建一个稍微复杂的示例&#xff0c;展示不同疾病患者在治疗过程中的流动&#xff0c;以及他们的治…

当事人请求以审计单位的审计意见作为确定工程造价依据的,如何处理?

答&#xff1a;建设工程施工合同未约定工程造价以审计单位的审计意见为准&#xff0c;当事人请求以审计单位作出的审计意见、财政评审机构作出的评审结论作为确定工程造价依据的&#xff0c;人民法院不予支持。建设工程施工合同约定工程造价以审计意见为准&#xff0c;但审计单…

150道MySQL高频面试题,学完吊打面试官--平衡二叉树,红黑树,B树和B+树

前言 本专栏为150道MySQL大厂高频面试题讲解分析&#xff0c;这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。 MySQL应用广泛&#xff0c;在多个开发语言中都处于重要地位&#xff0c;所以最好都要掌握MySQL的精华面试题&#xff0c;这也…