索引绘图
索引绘图
是一种由开发者指定顶点连接顺序的绘图方式。优势是可以复用顶点,减少内存的使用。
如绘制一个金字塔3D图形时,如果使用三角形带或三角形组合绘制时,将会有多个顶点的重复,但如果使用索引绘图,则只需要5个点,重复利用,指定其连接顺序即可实现金字塔3D图形的绘制。
image金字塔,有5个面,由6个三角形组成,一共有18个顶点,然而实际肉眼可见的只有5个顶点。
可以理解为这个5个顶点通过其中3个顶点的不同组合,最终组合成金字塔6个三角形面的18个顶点。其中5个顶点都在不断的重复利用。
索引绘图就是通过索引的方式表示顶点之间的连接,将重复顶点复用进行图形绘制的一种技巧。
索引绘制需要做两件事:一个构造良好的索引数组和一个新的索引绘制命令。
- 索引数组
索引数组,存储在缓存对象中,它有一个特别的缓存对象,GL_ELEMENT_ARRAY_BUFFER
. 你可以使用这个缓存对象来作为正常的缓存对象使用,就像GL_ARRAY_BUFFER
。但是对于OpenGL
他有特殊含义,那就是索引绘图必须使用这个缓存对象。
- 索引绘制命令
为了进行索引绘图,我们需要将索引数组绑定到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);
网友评论