g1utInitDi splayMode(GLUT_DEPTH | GLUT_RGB):

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

glEnable(GL_DEPTH_TEST);

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

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) :

Практические упражнения 8.4.1. Приращения Покажите подробно, как определяются dMt, dtiRht ad по известным значениям псевдоглубины в вершинах полигона.

8.4.2 Кодирование значений глубины Пусть для каждого элемента буфера глубины выделено Ъ бит. При помощи этих Ь бит предстоит записывать значения псевдоглубины, лежащие в диапазоне от 0 до 1. Величину от 0 до 1 можно представить в двоичной форме dtd2d3 db, где di принимают значения 0 или 1. Например, псевдоглубина 0,75 кодируется как 1100000000. Хорошо ли использованы эти Ь бит? Обдумайте другие варианты.

8.4.3. Уменьшение размера буфера глубины Если недостаточно памяти для реализации полного буфера глубины, то имеется возможность создавать изображение по частям. В рамках этой технологии буфер глубины создается только для некоторой части строк развертки, после чего алгоритм повторяется для каждой из частей. Например, для дисплея 512 на 512 пикселов можно выделить память для буфера глубины из расчета только 64 строк развертки и выполнить вычисления по алгоритму восемь раз. Каждый раз просматривается весь список граней, вычисляются глубины для тех граней, которые покрывают используемые строки развертки, и выполняются сравнения с преобладающими глубинами. Необходимость восьмикратного просмотра списка граней, разумеется, уменьшает скорость работы алгоритма. Пусть на сцене имеется Fграней и каждая грань покрывает в среднем L строк развертки. Оцените, насколько больше времени займет применение метода буфера глубины в случае, когда память выделена только для nRows/N строк развертки.

17 Ф. Хилл

Визуализация граней для усиления реалистичности

8.4.4. Буфер глубины для одной строки развертки Фрагментация буфера кадров из предыдущего упражнения может быть доведена до предела, когда в буфер глубины записываются глубины только для одной строки развертки. Очевидно, что такой подход требует большего количества вычислений, так как каждая грань «обновляется» многократно, один раз для каждой строки развертки. Обдумайте, как модифицировать вышеприведенный алгоритм для обработки единственной строки развертки, и оцените, во сколько раз дольше работает новый алгоритм по сравнению со старым, имеющим полноэкранный буфер глубины.


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