当使用顶点缓冲区对象绘制纹理基元时,我们必须定义一个单独的缓冲区来存储每个顶点的纹理坐标列表。这个纹理坐标数组必须映射到VBO中的每个顶点,因此,如果我们绘制许多基元,我们需要一个大数组。
但是,如果所有基元具有相同的纹理坐标,则重复使用glDraw *调用绘制的每个基元的坐标是浪费。
我需要绘制大量纹理四边形。四边形共享相同的纹理。所有顶点都放在VBO中,并创建一个大的纹理坐标数组。通过调用glDrawArrays绘制纹理四边形。
4----3 8----7
| /| | /|
| / | | / |
| / | | / |
|/ | |/ |
1----2 5----6
vertex buffer: { 1, 2, 3, 4, 5, 6, 7, 8 }
Texture coordinate array: { 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1 }
<-------------------->
coordinates repeated
for second quad
纹理坐标数组每4个顶点重复一次。每次必须绘制一批四边形时,必须重新创建此缓冲区,因为我们事先不知道四边形的数量。重复纹理坐标也会浪费内存。
当要绘制的图元具有所有相同的纹理坐标时,有没有办法去除纹理坐标数组中的重复?