OpenGL в Delphi

       

Пример на использование буфера накопления




Пример очень простой: на экране нарисованы два разноцветных прямоугольника, частично перекрывающие друг друга, в области пересечения происходит смешение цветов (Рисунок 4.37). Первые две цифровые клавиши задают режим воспроизведения полигонов, линиями или сплошной заливкой. При инициализации работы приложения вызовом команды glclearAccum задается значение, которым заполняется буфер накопления. Воспроизведение кадра состоит в том, что прямоугольники рисуются в буфере кадра по отдельности, в буфере накопления изображения накапливаются. Ключевую роль здесь играет команда glAccum:

glClear (GL_COLOR_BUFFER_BIT) ;
glCallList(thingl); // красный прямоугольник
// буфер кадра загружается в буфер накопления с коэффициентом 0.5
glAccum (GL_LOAD, 0.5);
glClear(GL_COLOR_BUFFER_BIT); // экран очищается
glCallList(thing2); // зеленый прямоугольник
// наложение старого содержимого буфера накопления
//с содержимым буфера кадра
glAccum(GL_ACCUM, 0.5);
// содержимое буфера накопления выводится в буфер кадра
glAccum(GL_RETURN, 1.0);

Здесь требуются некоторые пояснения.
Если вторым аргументом команды glAccum задается GL_LOAD, старое содержимое буфера аккумуляции затирается, подменяется содержимым буфера кадра.
Первые три действия примера можно осуществлять и так, т. е. явным образом очищая буфер накопления.

// очищаются буфер кадра и буфер накопления
glClear(GL_COLOR_BUFFER_BIT or GL_ACCUM_BUFFER_BIT);
glCallList(thingl); // красный прямоугольник
// содержимое буфера кадра смешивается с содержимым буфера накопления
// (пустым)
glAccum(GL_ACCUM, 0.5);

Вторым параметром команды glAccum можно манипулировать для управления яркостью изображения, в данном примере полигоны помещаются в буфер накопления с коэффициентом 0 5, т е их яркость уменьшается вполовину. При итоговом вызове этой команды яркость можно увеличить, коэффициент может принимать значения больше единицы
Теперь перейдем к проекту из подкаталога Ех59, рисующему на экране несколько объектов из модуля GLUT (рис 4.38).



Содержание раздела