В OpenGL координаты проекции нормируются в диапазон от -1,0 до 1,0, и значения глубины между ближней и дальней плоскостью отсечения затем дополнительно нормируются в диапазон от 0,0 до 1,0. Значение 0,0 соответствует ближней плоскости отсечения (плоскость проекции), а значение 1,0 - дальней. Как вариант, данные нормированные значения можно выравнять с помощью функции

glDepthRange (nearNormDepth, farNormDepth); По умолчанию nearNormDepth = 0.0 и farNormDepth = 1.0. В то же время, используя функцию glDepthRange, можно присвоить данным параметрам любые значения из диапазона 0-1, включая nearNormDepth > farNormDepth. Используя функцию glDepthRange, можно ограничить проверки с помощью буфера глубины любой областью объема наблюдения и даже поменять местами ближнюю и дальнюю плоскости отсечения.

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

glDepthFunc (testCondition); Параметру testCondition можно присвоить любое из следующих восьми значений: GL_LESS, GL_GREATER, GL_EQUAL, GL_NOTEQUAL, GL_LEQUAL, GL_GEQUAL, GL_NEVER (точки не обрабатываются), GL_ALWAYS (обрабатываются все точки). Данные проверки могут быть полезными в различных приложениях, где они позволяют сократить вычисления в буфере глубины. По умолчанию значение параметра testCondition - GL_LESS, так что значение глубины обрабатывается, если оно меньше текущего значения в буфере глубины для данного положения пикселя.

Кроме того, можно задать статус буфера глубины - “только чтение” или “чтение-запись”. Для этого используется следующая функция:

glDepthMask (writeStatus); Если writeStatus = GL_TRUE (значение по умолчанию), из буфера глубины можно считывать значения и производить запись в буфер. При writeStatus = GL_FALSE режим записи в буфер глубины невозможен, допускается только извлечение значений для сравнения при проверках глубин. Данная возможность полезна, когда требуется использовать некоторый сложный фон при отображении различных объектов переднего плана. После записи фона в буфер глубины режим записи отключается, и выполняется обработка переднего плана. Это позволяет генерировать ряд кадров с различными объектами переднего плана или одним объектом в различных позах для анимационной последовательности. Таким образом, записываются только значения глубины фона. Другой сферой применения функции glDepthMask является отображение эффектов прозрачности (раздел 10.20). В этом случае требует ся записать только глубины непрозрачных объектов для проверок видимости, но не глубины точек прозрачной поверхности. Поэтому при обработке прозрачной поверхности режим записи для буфера глубины отключается.

МЕТОДЫ OpenGL ИССЛЕДОВАНИЯ ВИДИМЫХ КАРКАСНЫХ ПОВЕРХНОСТЕЙ

Каркасное изображение стандартных графических объектов получается в OpenGL путем генерации только краев этих объектов. Для этого функция режима многоугольников (раздел 4.14) задается, например, в таком виде:

glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);


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