考虑一个由多个对象填充的单个 VBO(或者可能是多个 VBO),每个对象都具有任意顶点数。出于演示目的,假设有一个苹果,有 500 个顶点,一个橙子,有 650 个顶点存储在 VBO 中。
通常,如果我想绘制橙色,我只需调用 glDrawRangeElements 并指出我想绘制元素 500-1150。如果我想在空间中的特定位置绘制橙色,我会使用模型转换。
但是,如果我想绘制可能有数千个对象怎么办?此外,如果 VBO 包含数百个甚至数千个对象作为一种“对象库”呢?我不希望使用即时模式(即,为每个对象手动调用glDrawRangeElements )将我想要绘制的内容传输到我的 GPU 。这将增加与 GPU 通信的大量开销。
我正在寻找的是一种使用 OpenGL 一次性上传某种数组的方法。该数组将包含我要绘制的每个对象的某种标识符,并且可能包含每个对象的转换(位置、旋转)。因此,如果我想在任意位置绘制不同水果的海洋,我只需计算一次索引并上传即可。阵列可以交错。例如,数组可能如下所示:[object id 1 ]、[ position 1 ]、[rotation 1 ] ... [object id n ]。