• записать текущие матрицы наблюдения и геометрических преобразований;

• задать окно выбора для ввода мышью;

• присвоить объектам идентификаторы и переработать сцену, используя обновленный отображаемый объем (затем информация об указке записывается в буфере указки);

• восстановить исходную матрицу наблюдения и геометрических преобразований;

• определить число объектов, на которые указывает ссылка и вернуться к нормальному режиму визуализации;

• обработать информацию о выборе с помощью указки.

Кроме того, можно использовать модификацию указанных процедур для выбора объектов без интерактивного ввода мышью. Для этого задается не искомое окно выбора, а вершины обновленного отображаемого объема.

Массив буфера указки подготавливается с помощью команды

glSelectBuffer (pickBuffSize, pickBuffer); Параметр pickBuffer задает целочисленный массив с элементами pickBuffSize. Перед активизацией операции выбора с помощью указки (режима выбора) нужно вызвать функцию glSelectBuffer. Для каждого объекта, выбранного с помощью указки, в массиве ее буфера создается целая информационная запись.

Несколько информационных записей можно сохранить в буфере указки в зависимости от размера и расположения окна выделения. Каждая запись в буфере указки содержит следующую информацию.

1. Положение объекта в стеке - число идентификаторов в стеке имен, расположенных над положением выбранного объекта (включая позицию объекта).

2. Минимальная глубина выбранного объекта.

3. Максимальная глубина выбранного объекта.

4. Список идентификаторов в стеке имен от первого (верхнего) идентификатора до идентификатора выбранного объекта.

Целочисленные значения глубин, хранимые в буфере указки, - это исходные значения из диапазона 0-1,0, умноженные на 232 - 1.

Для активизации указки OpenGL используется операция

glRenderMode (GL_SELECT); При этом мы переходим в режим выбора, следовательно, для обработки сцены используется конвейер наблюдения, но данные не заносятся в буфер кадра. Запись информации для каждого объекта, который был бы отображен в обычном режиме визуализации, помещается в буфер указки. Кроме того, указанная команда возвращает число объектов, выделенных с помощью указки, которое равно числу информационных записей в буфере указки. Чтобы вернуться в нормальный режим визуализации (режим по умолчанию), вызывается процедура glRenderMode с аргументом GL_RENDER. Третья опция - это аргумент GL_FEEDBACK, который содержит координаты объекта и другую информацию из буфера обратной связи, которая отображается рядом с объектом. Режим обратной связи используется для получения информации о типах и параметрах примитивов, а также других параметрах, связанных с объектами на сцене.

Для активизации стека имен (целочисленных идентификаторов), фигурирующего при выборе с помощью указки, используется такая процедура.

gllnitNames ( ) ; Изначально стек идентификаторов пуст, и его можно использовать только в режиме выбора. Чтобы поместить в стек целое значение (без знака), вызывается следующая функция.


⇐ вернуться назад | | далее ⇒