OpenGL - 为顶点缓冲区对象定义重复纹理坐标

时间:2014-03-03 05:47:34

标签: c++ opengl textures

问题

当使用顶点缓冲区对象绘制纹理基元时,我们必须定义一个单独的缓冲区来存储每个顶点的纹理坐标列表。这个纹理坐标数组必须映射到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个顶点重复一次。每次必须绘制一批四边形时,必须重新创建此缓冲区,因为我们事先不知道四边形的数量。重复纹理坐标也会浪费内存。

问题

当要绘制的图元具有所有相同的纹理坐标时,有没有办法去除纹理坐标数组中的重复?

0 个答案:

没有答案