索引绘图方式

回看EGL&OpenGL着色语言及案例,咱们从案例代码6.3 顶点、纹理数据中能够看到,一个正方形四个顶点,会分红两个三角形六个顶点,顶点数组中就会存在重复的两条数据,当图形更复杂时,重复的数据就会更多。那么有没有存在一种方式能够简化?数组


索引绘图

以前咱们采用的绘图方式是序列绘图,使用glDrawArrays函数。缓存

序列绘图是将顶点按顺序存放在顶点缓存中,当绘图时,按照图元绘制方式进行读取并绘制出图形。 markdown

若是绘制三角形,会取出“1,2,3”数据进行绘制。函数

索引绘图的顶点也是存储在顶点缓存中,但它的读取方式是由咱们提供的索引数据决定的,索引数组保存了顶点之间的链接关系。 绘制三角形时,会取出“1,3,7”数据进行绘制。oop

索引绘图的优点:post

  • 不须要重复定义顶点信息,减轻编码工做
  • 减小内存占用,提升访问效率

调整GLSL案例

1.数据调整

索引数组保存的是,图形中三角形顶点的链接关系,哪三个顶点组成一个三角形.好比说,上图中的索引数组能够经过1-2连线切割为两个三角形,索引数组为ui

GLuint indices[] = {
	0,1,2,
    1,3,2,
}
复制代码

对应的顶点数组为编码

GLfloat attrArr[] = {
    -0.5f, 0.5f, -1.0f,     0.0f, 1.0f, //左上0
    -0.5f, -0.5f, -1.0f,    0.0f, 0.0f, //左下1
    0.5f, 0.5f, -1.0f,      1.0f, 1.0f, //右上2
    0.5f, -0.5f, -1.0f,     1.0f, 0.0f, //右下3
};
复制代码

2. 绘制

6.4 开始绘制spa

glDrawArrays(GL_TRIANGLES, 0, 6);
替换为    
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices);

/*
void glDrawElements(GLenum mode, GLsizei count,GLenum type, const GLvoid *indices
mode:图元绘制方式
count:顶点总数
type:索引值类型
indices:索引数组存储位置的指针
*/

复制代码

推荐引用:.net

序列绘图&索引绘图

相关文章
相关标签/搜索