learnOpenGL 笔记1.4.3EBO

假如我们要绘制两个共边的三角形,实际上涉及的顶点是4个,然而如果我们用VBO和VAO来绘制,就必须输入6组数据,因为不允许重复使用。这样就造成了浪费。
为了解决这个问题,我们引入EBO索引缓冲对象(Element Buffer Object)。

  1. 我们要输入顶点数据和索引
float vertices[] = {
    0.5f, 0.5f, 0.0f,   // 右上角
    0.5f, -0.5f, 0.0f,  // 右下角
    -0.5f, -0.5f, 0.0f, // 左下角
    -0.5f, 0.5f, 0.0f   // 左上角
};

unsigned int indices[] = { // 注意索引从0开始! 
    0, 1, 3, // 第一个三角形
    1, 2, 3  // 第二个三角形
};
  1. 创建EBO
unsigned int EBO;
glGenBuffers(1, &EBO);
  1. 绑定EBO并把数据输入
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

注意绑定顺序为VAO,VBO,EBO,不能乱

  1. 渲染绘制
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

当使用EBO进行绘制时使用的是glDrawElements函数,第一个参数指定了我们绘制的模式,这个和glDrawArrays的一样。第二个参数是我们打算绘制顶点的个数,这里填6,也就是说我们一共需要绘制6个顶点。第三个参数是索引的类型,这里是GL_UNSIGNED_INT。最后一个参数里我们可以指定EBO中的偏移量。

注意,EBO实际上对应了VAO的,因为索引中的数字指的是某个顶点,VBO是一串数据,没有区分顶点,VAO才划分了顶点,所以,除了最后的绘制,其余部分VAO参与必不可少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值