顶点数据组织-VAO

在绘制一个三角形时,在每次VertexShader当中,会处理顶点所有的属性(Attribute),所以需要知道以下信息:
1、当前处于第几个顶点
2、当前顶点position信息从哪里获取
3、当前顶点color/uv信息从哪里获取

举例:对于三角形的绘制,可将属性信息赋予编号(position-0,color-1,uv-2),做成映射表格,即VertexArrayObject(VAO),每个三角形对应一个VAO描述结构
VertexShader里再使用属性编号将顶点属性回读出来即可

图-1

顶点数据组织举例(分离式)

图-2

顶点数据组织举例(交叉式)

图-3

程序结构设计

图-4

图-5

对于一个三角形ABC的数据信息,可以描述为一个交叉的VBO,或多个独立的VBO;因此可以两种管理模式,分配一个VAO,或设置VAO所有属性的描述信息

在绘制时,只需要传入需要绘制的三角形对应的VAO即可

如何存储,网格-Mesh

由多个三角形拼接而成的曲面,称为一个Mesh
特点:
1、由多个三角形拼接而成
2、每个三角形都可能与邻接三角形共用顶点

图-6

问题:
1、共用顶点可否只描述一次,不用重复存储
2、可否把所有顶点打包组织成多个VBO,整个Mesh做成一个VAO?

Mesh-顶点共用

两个三角形各自存储顶点数据,需要192bytes,也造成了一定重复数据,需要调用两次绘制函数

图-7

如果改为将Mesh所有顶点属性合并存放:

图-8

总结

对于一个Mesh,系统使用多个或一个VBO存储所有顶点数据,而且可以避免顶点数据重复,使用EBO来描述三角形构成;使用VAO来表示整个模型属性构成

图-9