当前位置: 首页 > news >正文

OpenGL学习笔记-03-VBO/VAO

VBO

  • 全称:顶点缓冲对象(Vertex Buffer Object)
  • 本质:就是一个管理GPU显存的对象
  • 作用:用来管理在GPU上开辟的显存,这块显存通常用来存储顶点
  • 类比:一个装着你三角形顶点的箱子

VAO

  • 全称:顶点数组对象(Vertex Array Object)
  • 本质:就是一个“配置清单”,告诉GPU,现在用的是哪一段VBO,这一段VBO里的数据是怎么排布的
  • 作用:让我不用每画一个三角形,都要重新走一遍所有的绑定流程
  • 类比:箱子上的说明书

生活化的类比

概念类比解释
原始数据你要寄的一堆商品(衣服、书本、电子产品)CPU内存里的顶点数组
VBO你把这些商品统一装进一个快递大箱子,然后交给快递公司把数据从CPU上传到GPU显存
VAO你在箱子外贴一张发货清单:“第一件是衣服,第二件是书本,第三件是电子产品”告诉GPU“每3个数是一个顶点的位置,每2个数是纹理坐标”
glDrawArrays你对快递员说:“按这张清单处理1号到3号商品”命令GPU开始画
  • 如果没有VAO(说明书):每次画的时候,你都要重新跟GPU说一遍“位置在偏移0、颜色在偏移12、步长是32”——就像每次都要重新写发货清单,快递员会被搞疯。
  • 有了VAO:你提前把说明书写好,以后每次只需要说“按说明书A来处理”,快递员就知道怎么做了。

代码层面的示例

// 第一步:准备原始数据(你要寄的商品)floatvertices[]={// 位置 // 颜色-0.5f,-0.5f,1.0f,0.0f,0.0f,0.5f,-0.5f,0.0f,1.0f,0.0f,0.0f,0.5f,0.0f,0.0f,1.0f};// 第二步:创建VBO(把商品装箱,寄给GPU)unsignedintVBO;glGenBuffers(1,&VBO);// 申请一个快递箱子glBindBuffer(GL_ARRAY_BUFFER,VBO);// 打开这个箱子glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);// 把数据装进去// 第三步:创建VAO(写说明书,告诉GPU怎么读)unsignedintVAO;glGenVertexArrays(1,&VAO);// 申请一张说明书glBindVertexArray(VAO);// 开始写说明书// 说明书内容:位置数据在偏移0的位置,每5个数一组glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,5*sizeof(float),(void*)0);glEnableVertexAttribArray(0);// 说明书内容:颜色数据在偏移3个float的位置,每5个数一组glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,5*sizeof(float),(void*)(3*sizeof(float)));glEnableVertexAttribArray(1);// 第四步:画图(快递员按说明书处理)glBindVertexArray(VAO);// 把说明书递给快递员glDrawArrays(GL_TRIANGLES,0,3);// 开始处理前3个顶点

两者的关系

  • VBO是必须的,VAO是可选的(但强烈建议使用)

    • 只有VBO,没有VAO:每次画之前都要调用glVertexAttribPointer重新配置一遍(麻烦,但能跑)
    • 有了VAO:配置一次,后面只需glBindVertexArray就能切换不同模型的数据格式
http://www.jsqmd.com/news/1078393/

相关文章:

  • Python实战:Excel箭头取值算法,一次解决上下查找匹配问题
  • 基于SpringBoot的校园社团管理与发展态势分析系统
  • LeetCode 3737.统计主要元素子数组数目 I:枚举+计数
  • 大语言模型(LLM)核心技术与训练全流程解析
  • 星载深度学习实战:深空探测中的模型压缩与实时部署
  • 快速搭建MQTT服务器:5步搞定
  • 5套AI提问万能框架,同样问题答案质量直接提升40%
  • MeTube:自托管的 yt-dlp 下载管理界面
  • G1 释放物理内存,避免长期无效占用内存
  • 企业级AI落地实操指南:Copilot Studio与Azure AI Search深度集成
  • 想住阳朔遇龙河民宿?这几家凭啥成游客首选,速来揭秘!
  • 被需要的感觉,会上瘾
  • 为什么pandas读Excel日期列全是浮点数字?
  • 2轴舵机控制板
  • LLM Evaluation 论文盘点:从静态榜单到动态、抗污染、任务化评测
  • Linux命令:zsh
  • Roblox帧率解锁终极指南:如何免费突破60FPS限制获得流畅游戏体验
  • MonetaMarkets的账户协同感够不够清楚?
  • 后端工程师转型AI第一课--Ollama与私有化大模型实战
  • 从手动配置到预设即代码
  • 激动的心颤抖的手 真的领到了8元
  • T140 风扇噪音大 竟然电池原因
  • 第5篇:《DC-DC电感啸叫排查:饱和电流选小,满载电流波形畸变》
  • 1.全面理解Mysql架构
  • go: Push Pull Pattern
  • 从任务积压到文件队列:Prometheus业务指标监控与告警指南
  • 2026企业协作网盘推荐:5款企业文档协作平台对比与选型指南
  • 神经算子与GRU-STONe在航空辐射监测中的应用
  • DCU深度技术报告_下篇_性能复盘与研发经验总结
  • PDFSlideshow使用教程,PDF转幻灯片演示工具绿色版下载