average = texture(s* + ак, r* + Bt).

Здесь ctj и р\ - малые случайные величины, которые легко создать при помощи генератора случайных чисел, а их распределение при желании можно распространить на всю площадь текстурного квадрата.

Сглаживание с использованием стохастической выборки

Рис. 10.51. Сглаживание с использованием стохастической выборки Мы снова встретимся с методом стохастической выборки в главе 14, где он будет использован в качестве мощного инструмента для трассировки лучей.

10.8.3. Сглаживание с применением OpenGL

В OpenGL предусмотрен ряд средств для выполнения сглаживания. Проще всего в использовании буфер-накопитель (accumulation buffer), являющийся дополнительной областью памяти, подобный буферу кадров; OpenGL может его создавать и рисовать внутри него. Этот метод сглаживания напоминает метод стохастической выборки. Он рисует сцену многократно со слегка различных позиций (отличающихся всего на доли пиксела) и добавляет результаты в буфер-накопитель. После добавления всех этих слегка «возмущенных» рисунков в буфер-накопитель результаты копируются в буфер кадров, и на дисплей выводится сглаженное изображение. Таким образом, для каждого пиксела формируется усредненное значение цвета, основанное на цветах спроектированной сцены, лежащих в непосредственной близости от данного пиксела.

Ниже приводится код, который показывает, как это может быть осуществлено при съемке трехмерной сцены с помощью камеры. Буфер-накопитель создается при запуске1; его содержимое при инициализации обнуляется посредством вызова подпрограммы glClear(6L_ACCUM_BUFFER_BIT). Затем сцена рисуется восемь раз, причем каждый раз производится малое «перемещение» камеры, данные о котором сохраняются в векторном массиве jitter[] («дрожание»). Каждое новое изображение масштабируется с коэффициентом одна восьмая и добавляется - пиксел за пикселом - в буфер-накопитель с помощью подпрограммы glAccum(6L_ACCUM, 1/8.0). После того как нарисованы восемь изображений, буфер-накопитель копируется в буфер кадров посредством вызова glAccum(GL_RETURN, 1.0). Вот этот код"opengl1_738.html">⇐ Предыдущая| |Следующая ⇒