EBO 其实就是个索引,绑定在相应的VAO中,用来描述绘制顺序。比如在OpenGL绘制三角形的时候,假设有四个顶点,我称他们分别为1,2,3,4号顶点,常规绘制三角形函数是按三个点为一组,{1,2,3,4},他就只会绘制123为三角形,4就不管了,如果我们想拿一个共用边加上4绘制三角形比如拿12边,就需要写成{1,2,3,4,1,2},他不够灵活,像这样存储的话,如果每个顶点还有颜色什么的数据就会导致需要的内存过大,这里就用到EBO了,顶点数据差不多,区别就在于当引入顶点的时候只需要存储顶点数据,其他的属性通过绑定VAO实现可重复调用,以达到节省内存的作用。

数据准备

//准备数据
//顶点数据x,y,z
float position[]={
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0.0f,0.5f,0.0f,
0.5f,0.5f,0.0f
};//索引(连线顺序)
uint indices[]={
0,1,2,
2,1,3
};

vbo创建

接下来实现一个简单的EBO,首先我们需要创建一个VBO,在显卡显存中开辟一个空间存储顶点数据

//创建VBO
GLuint vbo;
glGenBuffers(1,&vbo);//创建一个缓冲区
glBindBuffer(GL_ARRAY_BUFFER,vbo);//把vbo绑定上去
glBufferData(GL_ARRAY_BUFFER,sizeof(position),position,GL_STATIC_DRAW);//把顶点数据存进去

ebo创建

//创建EBO
GLuint ebo;
glGenBuffers(1,&ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ebo);//GL_ELEMENT_ARRAY_BUFFER是状态机上的索引接口
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);

vao创建

//创建VAO
glGenVertexArrays(1,&vao);
glBindVertexArray(vao);

vao绑定vbo,ebo

//绑定vbo,ebo加入属性描述信息
//加入位置描述信息
glBindBuffer(GL_ARRAY_BUFFER,vbo);//可省略,因为下面glVertexAttribPointer会向上查询绑定的vbo来绑定vao
glEnableVertexAttribArray(0);//用vao的0号位置信息描述状态机已绑定的vbo
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,sizeof(float)*3,(void*)0);//加入ebo到vao
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ebo);//这个不能省略,从头到尾没有glVertexAttribPointer这样的函数向上查询,需要手动将ebo绑定给vao

解绑

适当的时候要注意解绑,避免需要绑定别的vbo或者vao的时候报错

//解绑
glBindVertexArray(0);

这样一个完整的流程就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/78075.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/78075.shtml
英文地址,请注明出处:http://en.pswp.cn/web/78075.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

界面控件DevExpress WPF v25.1预览 - AI功能增强(语义搜索)

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

零基础做自动驾驶集成测试(仿真)

图 1:使用 GPUDrive 进行极快的多代理模拟。上图:GPUDrive 中 Waymo Open Motion Dataset 场景的鸟瞰图,方框表示受控智能体,圆圈表示其目标。底部:相应的代理视图,以一个代理为中心。可以根据用户的目标轻…

EasyRTC嵌入式音视频实时通话SDK技术,打造低延迟、高安全的远程技术支持

一、背景 在当今数字化时代,远程技术支持已成为解决各类技术问题的关键手段。随着企业业务的拓展和技术的日益复杂,快速、高效地解决远程设备与系统的技术难题变得至关重要。EasyRTC作为一款高性能的实时通信解决方案,为远程技术支持提供了创…

【C语言常用字符串解析】

总结一下在 C 语言中用于字符串解析(特别是从文件中读取行并提取数据)的常用函数、 核心任务: 通常是从文件中读取一行文本(一个字符串),然后从这个字符串中提取出需要的数据(比如数字、单词等…

SpringTas定时任务使用详解

文章目录 Spring Task概述1、环境配置2.注解实现定时任务2.注解实现定时任务4. cron表达式详解: Spring Task概述 在开发中,我们经常会用到定时任务,而Spring Task 则是Spring提供的定时任务框架。 其它定时任务实现框架又jdk自带Timer和Qua…

数字智慧方案6172丨智慧医院扩建信息化整体规划方案(60页PPT)(文末有下载方式)

资料解读:智慧医院扩建信息化整体规划方案 详细资料请看本解读文章的最后内容。 在信息技术飞速发展的当下,医疗行业的信息化建设成为提升医疗服务水平、优化医院管理的关键路径。这份智慧医院扩建信息化整体规划方案,针对医院扩建过程中的信…

ts全局导入接口

为了在项目中全局导入 ITableColumn 接口,避免每次使用时手动导入,可以通过以下步骤实现: 1. 全局导入的实现方式 在 Vue 项目中,可以通过在 src 目录下创建一个 global.d.ts 文件,将 ITableColumn 接口声明为全局类型…

汽车启动原理是什么?

好的!同学们,今天我们来讨论汽车的启动原理,重点分析其中的动力来源和摩擦力作用。我会结合物理概念,用尽量直观的方式讲解。 1. 汽车为什么会动?——动力的来源 汽车发动机(内燃机或电动机)工…

【音频】Qt6实现MP3播放器

1、简介 解码MP3有很多种方法,比如:FFmpeg、GStreamer、Qt、libmpg123 库等,下面介绍使用,只使用Qt的接口方法解码、播放MP3。 开发配置: 1)操作系统:Windows11 2)Qt版本:Qt6.5.1 3)编译器:MinGW_64 2、获取音频输出设备 QMediaDevices 用于获取媒体设备,包括音…

【Linux】VSCode用法

描述 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 安装环境及运行C/C 1.1 安装及配置步骤 1.2 运…

WPF之RadioButton控件详解

文章目录 一、RadioButton简介二、RadioButton的基本用法1. 创建基本的RadioButton2. 分组管理3. 设置默认选中 三、RadioButton的重要属性和事件1. 关键属性2. 主要事件3. 事件处理流程4. 监听选中状态变化 四、数据绑定与RadioButton1. 基本数据绑定2. 数据绑定流程3. 使用枚…

笔试专题(十三)

文章目录 kotori和气球题解代码 走迷宫题解代码 主持人调度&#xff08;二&#xff09;&#xff08;难题&#xff09;题解代码 kotori和气球 题目链接 题解 1. 数学-排列组合 2. 每次乘完之后对109取模 代码 #include<iostream>using namespace std;int main() {int…

图形图像基础知识(1)---- RGB/YUV 颜色格式

目录 常见RAW颜色格式RGB类型YUV类型YUV类型汇总YUV444类型YUV422类型YUV420类型 参考实例 常见RAW颜色格式 RGB 类型&#xff1a; ARGB1010102&#xff0c;ABGR1010102&#xff0c;BGRA1010102&#xff0c;RGBA1010102 ARGB8888&#xff0c;ABGR8888&#xff0c;BGRA8888&…

CentOS7.9安装OpenSSL 1.1.1t和OpenSSH9.9p1

一、临时开启telnet登录方式&#xff0c;避免升级失败无法登录系统 &#xff08;注意telnet登录方式存在安全隐患&#xff0c;升级openssh相关服务后要记得关闭&#xff09; 1.安装telnet服务 yum -y install xinetd telnet* 2.允许root用户通过telnet登陆&#xff0c;编辑…

使用DCI和RTIT技术进行精准调优--看录像

使用DCI和RTIT技术进行精准调优_哔哩哔哩_bilibili 每次看录像都记录一下。 PT/RTIT简介 DCI技术即通过USB3.0接口去访问调试目标机的JTAG组件&#xff0c;凡是运行在CPU上的代码均可以进行调试&#xff0c;这就没有了使用WinDBG调试时&#xff0c;会出现的不能调试敏感代码…

从MCP基础到FastMCP实战应用

MCP(https://github.com/modelcontextprotocol) MCP&#xff08;模型上下文协议&#xff09; 是一种专为 基于LLM的工具调用外部工具而设计的协议 &#xff0c; 本质上是 LLM ↔ 工具之间的RPC&#xff08;远程过程调用&#xff09; 的一种安全且一致的处理方式&#xff0c; 是…

深入理解C语言中的整形提升与算术转换

深入理解C语言中的整形提升与算术转换 一.整形提升&#xff1a;概念与原理 在C语言中&#xff0c;整形提升&#xff08;Integer Promotion&#xff09;是一个重要但容易被忽视的概念。它指的是在表达式中&#xff0c;任何小于int类型的整型&#xff08;如char、short&#xf…

编程题python常用技巧-持续

1.字典 1.1排序 在Python中&#xff0c;要按照字典的值进行排序&#xff0c;可以按照以下步骤操作&#xff1a; 方法说明 ‌获取键值对列表‌&#xff1a;使用 dict.items() 获取字典的键值对视图。‌排序键值对‌&#xff1a;使用 sorted() 函数&#xff0c;并通过 key 参…

硬件工程师面试常见问题(11)

第五十一问&#xff1a;器件手册的翻译题目 要学英语啊&#xff0c;孩子。 第五十二问&#xff1a;二极管三极管常识题 1.二极管的导通电压一般是 0.7V 2.MOS管根据掺杂类型可以分为 NMOS和PMOS 3.晶体三极管在工作时,发射结和集电结均处于正向偏置,该晶体管工作在一饱和态。…

mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]区块的作用区别

1. [client] 区块 作用&#xff1a; 适用于 所有 MySQL 客户端工具&#xff08;如 mysql 命令行客户端、mysqldump、mysqladmin 等&#xff09;。 常见配置项&#xff1a; [client] host 127.0.0.1 # 默认连接的服务器地址 port 3306 # 默认端口 user root …