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

2024年最全OpenGL学习脚印 使用索引绘图(index drawing),2024年最新玩转MySQL

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

通过本节可以了解到

  • 索引绘图使用方法
  • 索引绘图应用场合

使用EBO开始索引绘图

EBO即Element Buffer Objects,用来存储绘制物体的索引。所谓索引就是对顶点属性数组中元素的一个位置标记。使用索引绘图时,先通过顶点属性数组指定数据,然后利用指向这些数据的索引来指示OpenGL完成绘图。使用索引绘图的原理如下图所示(来自VBO Indexing):
这里写图片描述

在左边图中,没有使用索引绘制矩形时,要重复指定重叠的顶点数据,V1和V2都重复了,使用了6个顶点属性数据;右边的图中,使用索引绘制时,只需要指定顶点在属性数组中的索引即可,使用0,1,2,3代表V0,V1,V2,V3顶点,绘制矩形一共指定了6个索引,使用4个顶点属性数据。

上面的例子可能看不出有大区别,但是当要绘制的物体包含多个重叠的顶点时,如果每个顶点属性包括了位置、颜色、纹理坐标、法向量等属性,那么将会造成很大的额外空间开销,影响GPU性能。同时,如果需要修改一个顶点处的数据,那么重复的顶点数据都要被改过来,这个工作也很无趣。因此,使用索引绘制能够节省存储空间,而且能灵活应对顶点属性的改变。
不使用索引也可以绘制矩形,我们使用6个顶点,数据如下:

GLfloat vertices[] = {// 第一个三角形-0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,0.5f, 0.0f, 0.0f,  0.0f, 1.0f, 0.0f,0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,// 第二个三角形-0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,0.0f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f,0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,};

然后在绘制时更新顶点数目即可:

    glDrawArrays(GL\_TRIANGLES, 0, 6);

下面介绍使用索引的绘制方法。我们需要在VBO中存储顶点属性数据,这在上一节已经介绍了。另一方面,就是使用EBO存储索引数据。我们重新指定顶点数据和索引数据如下:

   // 指定顶点属性数据 顶点位置 颜色GLfloat vertices[] = {-0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // 00.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,  // 10.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,  // 20.0f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f  // 3};// 索引数据GLshort indices[] = {0, 1, 2,  // 第一个三角形0, 3, 1   // 第二个三角形};

创建EBO,并将索引数据传送到EBO,如下:

glGenBuffers(1, &EBOId);
glBindBuffer(GL\_ELEMENT\_ARRAY\_BUFFER, EBOId);
glBufferData(GL\_ELEMENT\_ARRAY\_BUFFER,sizeof(indices), indices, GL\_STATIC\_DRAW);

顶点属性数据部分无需改动,在绘制物体时需要将glDrawArrays调整为glDrawElements.

API void glDrawElements( GLenum mode,
GLsizei count,
GLenum type,
const GLvoid * indices);
1.参数mode 同glDrawArrays一样表示绘制的基本图元类型 GL_POINTS, GL_LINE_STRIP等。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

http://www.lryc.cn/news/2418492.html

相关文章:

  • 【网络奇缘】- 如何自己动手做一个五类 以太网 RJ45 网络电缆(1)
  • 数据库入口和密码:维普、万方和cnki(转)
  • codeblocks 汉化教程
  • Gtalk基本功能完成
  • Win7系统提示找不到audiosrv.dll文件的解决办法
  • NOD32离线升级更新包使用方法
  • C# ASP.NET校园外卖网站管理系统源码 前台+后台
  • iebook超级精灵2008 专业版破解
  • robots协议相关知识(摘转自360百科)
  • 安卓系统一键root
  • Vue.js教程
  • 【单片机】2.8 AT89S52单片机的最小应用系统
  • 模型蒸馏探索(Bert)
  • 3D模型动画素材来源
  • 光棍节程序员闯关秀第1关(总共10关)
  • shsh备份工具_A12A13 iOS13备份shsh2简易工具/附详细教程
  • Temple Run的终点
  • 文件下载时直接对流进行zip加密压缩
  • 百度文心一言api 调用ERNIE-3.5-8K,Python技术开发文档
  • 三维装箱模型
  • 从技术支持看PLC制造商的差距
  • 给弟弟的国产山寨机安装软件
  • 常用的几种brush
  • 中标麒麟7.0+linux内核版本,中标麒麟7.0下载
  • 常见面试题之 1000的阶乘后面有多少个0
  • lsass.exe和smss.exe病毒专杀工具——即磁碟机病毒专杀工具(转载)
  • VS2005 SP1补丁下载与安装
  • VC++路径
  • 安卓表格布局android:collapseColumns,android:shrinkColumns和stretchColumn
  • Linux mail 命令(smtp.163.com)