Рассмотрим один VBO (или, возможно, несколько VBO), заполненный несколькими объектами, каждый из которых имеет произвольное количество вершин. Для наглядности предположим, что в VBO хранится яблоко с 500 вершинами и апельсин с 650 вершинами.
Обычно, если я хотел нарисовать апельсин, я просто вызывал glDrawRangeElements и указывал, что хочу нарисовать элементы 500-1150. Если бы я хотел, чтобы апельсин был нарисован в определенном месте в пространстве, я бы использовал преобразование модели.
Однако что, если я хочу нарисовать потенциально тысячи объектов? Кроме того, что, если VBO содержит сотни, если не тысячи объектов в качестве своего рода «библиотеки объектов»? Я бы предпочел не передавать то, что я хочу отрисовать, на мой графический процессор, используя немедленный режим (то есть вызывая glDrawRangeElements вручную для каждого объекта). Это добавит много дорогостоящих накладных расходов на связь с графическим процессором.
То, что я ищу, - это какой-то способ загрузить какой-то массив с OpenGL за один раз. Этот массив будет содержать какой-то идентификатор для каждого объекта, который я хочу нарисовать, и, возможно, преобразование для каждого (положение, поворот). Таким образом, если бы я хотел нарисовать море разных фруктов в произвольных местах, я бы просто один раз вычислил индекс и загрузил его. Массив можно чередовать. Например, массив может выглядеть так: [идентификатор объекта 1], [позиция 1], [поворот 1] ... [ идентификатор объекта n].
glBegin/glEnd
. - person Nicol Bolas   schedule 21.06.2012