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

EBO的使用

 

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.xdnf.cn/news/3333.html

相关文章:

  • 基于python的人工智能应用简述
  • Spring 提供了多种依赖注入的方式
  • C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
  • 电池预测 | 第27讲 基于CNN卷积神经网络的锂电池剩余寿命预测
  • x86架构详解:定义、应用及特点
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 18)
  • 人工智能对未来工作的影响
  • 治理和管理的区别
  • Linux内核notify通知笔录
  • 软件测评中心如何保障软件质量与性能?评测范围和标准有哪些?
  • Java 多线程进阶:线程安全、synchronized、死锁、wait/notify 全解析(含代码示例)
  • Go 语言中一个功能强大且广泛使用的数据验证库github.com/go-playground/validator/v10
  • 2025五一杯数学建模A题:支路车流量推测问题,思路分析+模型代码
  • 拉宾公钥密码算法实现
  • 面经-计算机网络——OSI七层模型与TCP/IP四层模型的对比详解
  • IDEA在项目中添加模块出现Error adding module to project: null(向项目添加模块时出错: null)的解决方法
  • 位运算切换大小写
  • 数字智慧方案6158丨智慧医疗解决方案精华版(58页PPT)(文末有下载方式)
  • Spark,集群搭建之Yarn模式
  • go实现双向链表
  • Unity SpriteRenderer(精灵渲染器)
  • Linux常用命令27——userdel删除用户
  • 如何阅读GitHub上的深度学习项目
  • 论文报错3
  • js文件加密。安装 Terser
  • C++负载均衡远程调用学习之TCP连接封装与TCPCLIENT封装
  • 审计专员简历模板
  • 【Hot 100】23. 合并 K 个升序链表
  • 【深度学习新浪潮】小米MiMo-7B报告内容浅析
  • MATLAB中removedelay函数用法