11-1.GLSL-索引绘图

2020-10-29  本文已影响0人  Pufus

索引绘图

索引绘图是一种由开发者指定顶点连接顺序的绘图方式。优势是可以复用顶点,减少内存的使用。
如绘制一个金字塔3D图形时,如果使用三角形带或三角形组合绘制时,将会有多个顶点的重复,但如果使用索引绘图,则只需要5个点,重复利用,指定其连接顺序即可实现金字塔3D图形的绘制。

金字塔

金字塔,有5个面,由6个三角形组成,一共有18个顶点,然而实际肉眼可见的只有5个顶点。
可以理解为这个5个顶点通过其中3个顶点的不同组合,最终组合成金字塔6个三角形面的18个顶点。其中5个顶点都在不断的重复利用。
索引绘图就是通过索引的方式表示顶点之间的连接,将重复顶点复用进行图形绘制的一种技巧。

image
索引绘制需要做两件事:一个构造良好的索引数组和一个新的索引绘制命令。
  1. 索引数组

索引数组,存储在缓存对象中,它有一个特别的缓存对象,GL_ELEMENT_ARRAY_BUFFER. 你可以使用这个缓存对象来作为正常的缓存对象使用,就像GL_ARRAY_BUFFER。但是对于OpenGL他有特殊含义,那就是索引绘图必须使用这个缓存对象。

  1. 索引绘制命令

为了进行索引绘图,我们需要将索引数组绑定到GL_ELEMENT_ARRAY_BUFFER,然后调用glDrawElements

//使用索引绘图
/*
 void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices);
 参数列表:
 mode:要呈现的画图的模型 
            GL_POINTS
            GL_LINES
            GL_LINE_LOOP
            GL_LINE_STRIP
            GL_TRIANGLES
            GL_TRIANGLE_STRIP
            GL_TRIANGLE_FAN
 count:绘图个数
 type:类型
         GL_BYTE
         GL_UNSIGNED_BYTE
         GL_SHORT
         GL_UNSIGNED_SHORT
         GL_INT
         GL_UNSIGNED_INT
 indices:绘制索引数组

 */
glDrawElements(GL_TRIANGLES, sizeof(indices) / sizeof(indices[0]), GL_UNSIGNED_INT, indices);
上一篇 下一篇

猜你喜欢

热点阅读