Проверку видимости можно выполнить с использованием функций буфера глубины OpenGL, описанных в разделе 9.14. При обработке каждой видимой непрозрачной поверхности записываются цвета поверхности и глубина поверхности. Однако при обработке видимой прозрачной поверхности нужно записать только ее цвета, поскольку поверхность не затеняет фоновые поверхности. Следовательно, при обработке каждой прозрачной поверхности буферу глубины с помощью функции glDepthMask присваивается статус “только чтение”.

Если объекты обрабатывать в порядке уменьшения глубины, режим записи буфера глубины выключается, а затем снова включается при обработке каждой прозрачной поверхности. В качестве альтернативы можно разделить объекты на два класса, как в следующем примере кода.

glEnable (GL_DEPTH_TEST);

/* Обработать все непрозрачные поверхности. */ glEnable (GL_BLEND); glDepthMask (GL_FALSE);

glBlendFunc (GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);

/* Обработать все прозрачные поверхности. */ glDepthMask (GL_TRUE); glDisable (GL_BLEND); glutSwapBuffers ( ); Если прозрачные объекты не обрабатываются в строгом порядке от фона к переднему плану, данный подход раскрашивает поверхности не всегда точно. Впрочем, для простых сцен он является простым и эффективным методом генерации приблизительных представлений эффектов прозрачности.

ФУНКЦИИ ВИЗУАЛИЗАЦИИ ПОВЕРХНОСТИ OpenGL

Поверхности можно отобразить с помощью процедур OpenGL, используя либо визуализацию поверхностей постоянной интенсивности, либо визуализацию Гуро. В OpenGL нет процедур для применения визуализации поверхностей по Фонгу, построения хода лучей или методов диффузного отражения. Метод визуализации выбирается с помощью функции

glShadeModel (surfRenderingMethod); Визуализация поверхностей постоянной интенсивности выбирается путем присвоения символьного значения GL_FLAT параметру surfRenderingMethod. Для затенения по методу Гуро (по умолчанию) используется символьная константа GL_SMOOTH.

Когда функция glShadeModel применяется к мозаичной криволинейной поверхности, такой как сфера, аппроксимированная многоугольной сеткой, процедуры визуализации OpenGL используют для расчета цвета многоугольника векторы нормали к поверхности в вершинах многоугольника. Декартовы компоненты вектора нормали к поверхности в OpenGL задаются командой

glNormal3* (Nx, Ny, Nz); В этой функции используются суффиксы-коды b (byte), s (short), i (integer), f (float) и d (double). Кроме того, если в массиве задаются векторные компоненты, прибавляется код-суффикс v. Значения типа byte, short и integer преобразуются в формат с плавающей запятой (float) из диапазона от -1,0 до 1,0. Функция glNormal задает компоненты вектора нормали к поверхности как значения параметра состояния, которые применяются ко всем последующим командам glVertex, а по умолчанию вектор нормали идет в положительном направлении оси г: (0.0, 0.0, 1.0).

При плоской визуализации поверхностей для каждого многоугольника требуется только один вектор нормали к поверхности. Таким образом, нормаль ко всем многоугольникам можно, например, задать следующим образом.


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