首页 > 其他分享 >OpenGL中的VAO、VBO、EBO

OpenGL中的VAO、VBO、EBO

时间:2024-08-21 11:28:04浏览次数:11  
标签:VAO 创建 EBO VBO 参数 顶点

一、概述

  目的:简单介绍一下VAO、VBO、EBO,使用他们能提高opengl的渲染效率

  VAO:顶点数组对象(Vertex Array Object)

    VAO就相当于一个管理者的角色,在GPU中创建一个VAO对象用于管理VBO、EBO。VBO和EBO创建绑定好后会自动挂到VAO下。

  VBO:顶点缓冲对象(Vertex Buffer Object)

    VBO顶点缓对象,在GPU中创建一个VBO对象,并在GPU中分配一块内存用于存储顶点数据。会一次性把顶点数据copy到GPU

  EBO:元素缓冲对象/索引缓冲对象(Element Buffer Object)

    EBO索引缓冲对象,在GPU创建一个EBO对象,并在GPU中分配索引缓冲区,用于把EBO定义的顶点索引copy到GPU。如果使用了EBO则绘制方法必须换成glDrawElement。

      有了EBO,用户可以任意组合其所定义的顶点顺序。

  

二、代码示例

  1.VAO使用

    a.创建VAO

      参数介绍:

        第一个参数:代表创建几个VAO对象

        第二个参数:创建的VAO的地址

glGenVertexArrays(1, &VAO);//创建VAO:顶点数组对象

    b.绑定VAO

      参数:上一步创建的VAO对象

//绑定VAO和VBO对象
glBindVertexArray(VAO);

    c.删除VAO

glDeleteVertexArrays()

 

  2.VBO使用

    a.创建VBO

      参数介绍:

        第一个参数:创建多少个VBO

        第二个参数:创建的具体的VBO

glGenBuffers(1, &VBO);//创建VBO:顶点数组缓冲

    b.绑定VBO

      参数介绍:

        第一个参数:固定值,代表要创建一个数组缓冲区

        第二个参数:上一步创建的VBO

glBindBuffer(GL_ARRAY_BUFFER, VBO);

    c.给VBO分配内存

      参数介绍:

        第一个参数:固定值,要和上一步的对应起来

        第二个参数:顶点数组总共占用多少个字节

        第三个参数:要传给GPU的具体顶点数组的值

        第四个参数:代表这个数组不经常变动

//把顶点数据放入缓冲区
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

  

    3.EBO的使用

      1.创建EBO

        参数介绍:

          第一个参数:创建多少个EBO

          第二个参数:创建的EBO对象

glGenBuffers(1, &EBO);//EBO元素索引缓冲,用来指定顶点应该如何排列和绘制

      2.绑定EBO

        第一个参数:固定值,代表要创建一个元素数组缓冲区

        第二个参数:上一步创建的EBO

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

      3.给EBO分配缓冲区(内存)   

      参数介绍:

        第一个参数:固定值,要和上一步的对应起来

        第二个参数:顶点数组总共占用多少个字节

        第三个参数:要传给GPU的具体索引缓冲的具体数据

        第四个参数:代表这个数组不经常变动

glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

  

标签:VAO,创建,EBO,VBO,参数,顶点
From: https://www.cnblogs.com/tony-yang-flutter/p/18371247

相关文章

  • Facebook广告投放指南:精准触达全球目标受众
    引言:在这个数字化时代,Facebook不仅是连接全球数十亿用户的社交纽带,更是品牌与企业触达全球目标受众的强大营销平台。本文将带您深入了解Facebook广告的投放策略,从广告类型选择到精准定位,再到预算管理,助您在全球市场中占据一席之地。Facebook广告的全球影响力作为全球最大......
  • Huawei Matebook e 2022 安装 archlinux 双系统
    本文同步发布于我的网站安装之前wifi名称修改为英文+数字的,以防之后没法联网准备好U盘并使用GPT分区表写入最新的arch镜像。基础安装开机按F2进入UEFI/BIOS设置,将SecureBoot(安全启动)关闭,按F10保存重启。开机按F12进入启动菜单,选择U盘启动。先按e在引......
  • 广告资料库是什么?如何正确使用Facebook广告资料库?一文解决你的烦恼!
    什么是广告资料库广告营销领域,创意和策略的更新速度极快。为了跟上这种节奏,广告资料库应运而生,成为广告人和营销专家的重要工具。广告资料库是一个集中存储和管理广告素材、创意案例、市场数据和用户反馈的平台。它不仅帮助用户获得灵感,还能提供市场趋势分析、效果评估和竞......
  • Turtlebot 3 ROS 苹果采摘机器人
    原文链接:https://www.youtube.com/watch?v=y1PVdGYccYs 这是加州理工学院电子工程系2024年苹果采摘的毕业设计项目。                ROBOTISROS机器人小车Turtlebot3Wafflepi智能开源平台SLAM自动导航TurtleBot3-Waffle-p......
  • 【漏洞复现】LiveBos UploadFile 任意文件上传漏洞
              声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。一、漏洞描述LiveBOS,由顶点软件股份有限公司开发的对象型业务架构中间件及其集成开发工具,是一种创新的软件开发模式,以业......
  • Auto-Logon After Windows-Reboot
    #askforlogoncredentials:$cred=Get-Credential-Message'Logonautomatically'$password=$cred.GetNetworkCredential().Password$username=$cred.UserName#savelogoncredentialstoregistry(WARNING:cleartextpasswordused):$path=&......
  • 【python学习】巧用notedown:Markdown与Jupyter Notebook的高效互转指南
    在数据科学、教学、技术写作等领域,Markdown文件和JupyterNotebook都是非常重要的工具。notedown是一个轻量级的Python库,能够方便地将Markdown文件转换为JupyterNotebook,或将JupyterNotebook转换为Markdown文件。这篇博客将介绍notedown的基本用法、常见命......
  • 通义千问-podcast播客AI转译与NotebookLM
    通义千问-podcast播客AI转译与NotebookLM背景通义千问的播客链接转写功能通义千问的播客链接转写功能是一个高效、便捷的工具,旨在帮助用户将播客链接中的音频内容自动转换为文字形式,并提取关键信息。这一功能主要面向播客爱好者、学习者和知识工作者,使得他们能够更加灵活地处理和......
  • Linux下如何安装配置Jupyter Notebook
    JupyterNotebook是一种交互式的开源编程环境,可以方便地创建和共享文档,其中包含实时代码、方程、可视化和叙述性文本。在Linux系统上安装和配置JupyterNotebook需要以下步骤:安装Python和pipJupyterNotebook是基于Python开发的,因此首先需要确保Python已经安装在您的系统上......
  • 如何从我的 Python 应用程序更新我的 Facebook Business 令牌?
    我有一个使用FacebookBusiness库的Python应用程序。因此,我需要使用Facebook提供的令牌来访问我的见解并操纵它们。但是,这个令牌有一个很长的到期日期,但我想知道是否有办法自动更新这个令牌在我的应用程序中,这样它就不会停止运行。当然可以!你可以使用Facebook提......