Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по GLScene.doc
Скачиваний:
255
Добавлен:
16.12.2018
Размер:
7.18 Mб
Скачать

Глава 25. Fbo или расширение ext_framebuffer_object в OpenGl.

EXT_framebuffer_object предоставляет очень простую и платформенно-независимую альтернативу использованию р-буферов, которые не обеспечивали плохую производительность и были слишком запутаны.

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

Также процедура выбора формата пикселов в этом расширении гораздо проще, чем для р-буфера.

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

Данное расширение вводит новый тип объекта в OpenGL - фреймбуфер ( framebuffer object, FBO).

Фреймбуфер состоит из набора отдельных логических буферов (цвета, глубины, трафарета) и параметров состояния.

Рис 1. Структура фреймбуфера.

В качестве логических буферов могут выступать как текстуры подходящих форматов, так и специальные объекты еще одного вводимого типа - рендербуфера ( renderbuffer object, RBO).

Рендербуфер содержит внутри себя простое двухмерное изображение (без использования пирамидального фильтрования) и может использоваться для хранения результатов рендеринга в качестве одного из логических буферов.

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

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

(по http://steps3d.narod.ru/tutorials/framebuffer-object-tutorial.html)

Глава 26. Рисование на канве.

GLCanvas – это аналог обычной дельфийской канвы, но работает намного быстрее. Итак, подключите модули GLCanvas и OpenGL1x, в инспекторе объектов GLScene добавьте TGLDirectOpenGL (Add object-> Direct OpenGL). Создайте событие OnRender, и добавьте в него следующие строчки:

procedure TForm1.GLDirectOpenGL1Render(Sender : TObject; var rci: TRenderContextInfo);

var

glc : TGLCanvas;

begin

glc:=TGLCanvas.Create(GLSceneViewer1.width,GLSceneViewer1.Height);

with glc do

begin

//Здесь нужно писать команды рисования на канве

end;

glc.Free;

end;

Теперь о самом рисовании:

InvertYAxis – меняет направление оси Y. По умолчанию ось X направлена слева направо, ось Y направлена сверху вниз;

PenColor – это свойство задает цвет рисования;

PenAlpha это свойство меняет прозрачность рисования, меняется от 0 до 1;

PenWidth толщина линий;

MoveTo(x, y) эта процедура перемещает карандаш в точку (x,y);

LineTo(x, y) рисует линию от текущей позиции карандаша до точки (x,y);

Line(x1, y1, x2, y2) рисует линию от точки (x1, y1) до (x2, y2);

Polyline(points) - соединяет линиями массив точек points;

Polygon(points) то же самое, что и Polyline, но еще соединяются первая и последние точки;

PlotPixel(x, y) рисует точку в указанных координатах;

FrameRect(x1, y1, x2, y2) – рисует не закрашенный прямоугольник, где (x1, y1) – координаты верхнего левого угла, (x2, y2) – координаты нижнего правого угла;

FillRect(x1, y1, x2, y2) то же самое, что и FrameRect, но прямоугольник закрашивается;

Ellipse(x1, y1, x2, y2) рисуется эллипс ограниченный прямоугольной областью;

Ellipse(x, y, xRadius, yRadius) рисует эллипс с центром в (x,y) и заданными радиусами;

FillEllipse(x, y, xRadius, yRadius) – аналогично предыдущей команде, но эллипс получается закрашенный.