При вычерчивании куба, в модели которого используются списки вершин, приходится довольно много раз вызывать различные функции OpenGL. Если с каждой вершиной ассоциируется определенный цвет, то нужно выполнить 60 вызовов функций OpenGL: 6 граней, формирование каждой из которых требует вызовов glBegin( ) и glEnd( ), 4 вызовов glColor( ) и 4 вызовов glVertex(). Каждый вызов функции влечет за собой накладные расходы и пересылку данных. Как будет показано в главе 6, при вычерчивании объекта также необходимо задавать векторы нормалей для каждой вершины, и в результате количество вызовов при формировании изображения куба даже превышает указанную цифру. Следовательно, хотя описанная структура данных и позволяет инкапсулировать информацию о геометрии и топологии куба как трехмерного объекта, соответствующий программный код будет выполняться не так быстро, как нам хотелось бы.

Массивы вершин (vertex arrays) в OpenGL обеспечивают значительное повышение скорости вычерчивания трехмерных объектов, состоящих из многоугольников, сохраняя при этом возможность инкапсуляции их внутренней топологической структуры. Использование такой структуры данных предусматривает три этапа. Первый - разрешение работы с механизмом обслуживания массивов векторов. Второй - передача исполнительной системе OpenGL информации о том, где и в каком формате содержатся в программе массивы вершин. Третий - формирование объектов с использованием этих массивов. Две первые операции выполняются в процессе инициализации программы, а третья, как правило, реализуется с помощью функций с обратным вызовом. Ниже будет показано, как это делается на примере формирования куба.

4.4.6. Массивы вершин

Объекты и геометрические преобразования

Пакет OpenGL позволяет работать с шестью специальными видами массивов - вершин, цветов, индексов цветов, координат текстур и флагов ребер, - соответствующих шести операторам между glBegin( ) и glEnd( ). Но, как правило, в отдельном приложении все эти типы не используются. В программе формирования цветового куба нам потребуются только массивы цветов и вершин. Механизм поддержки работы с этими типами массивов инициализируется следующими вызовами функций OpenGL:


⇐ Предыдущая| |Следующая ⇒