Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 300065.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
280.06 Кб
Скачать

3. Содержание и порядок выполнения работы

  1. Создать приложение.

  2. Откомментировать используемые в программе функции OpenGL.

  3. Оформить отчет.

Задания.

Создать программу, которая рисует:

Фигуру

Применить к построенной фигуре различные команды

  1. Тетраэдр;

установки видовых параметров

  1. Параллелепипед;

  1. Треугольную призму;

  1. Шестиугольную призму;

  1. Четырехугольную пирамиду;

  1. Шестиугольную пирамиду.

  1. Конус;

установки источника света

  1. Куб;

  1. Цилиндр;

установки характеристик материала

  1. Сферу;

  1. Полусферу;

вращения

  1. Тор.

:

ПРИЛОЖЕНИЕ 1

Контекст устройства и контекст воспроизведения

Ссылка на контекст устройства это величина типа HDC. Для ее получения можно вызвать функцию GetDC, аргументом которой является ссылка на нужное окно.

Пример функции, рисующей прямоугольник на рабочем столе:

procedure TfrmGL.Button1Click(Sender: TObject);

var

dc: HDC;

begin

dc := GetDC (0); // получаю ссылку на рабочий стол

Rectangle (dc, 10, 10, 110, 110);

ReleaseDC (Handle, dc);

DeleteDC (DC);

end;

или рисование прямоугольника на своем окне:

procedure TfrmGL.Button2Click(Sender: TObject);

var

dc: HDC; // ссылка на контекст устройства

begin

dc:= GetDC (Handle); // задаем значение ссылки

Rectangle (dc, 10, 10, 110, 110); // рисуем прямоугольник

ReleaseDC (Handle, dc); // освобождение ссылки

DeleteDC (dc); // удаление ссылки, освобождение памяти

end;

Ссылке на контекст устройства соответствует свойство canvas.Handle формы, принтера и некоторых компонентов Delphi.

Каков же все-таки смысл контекста устройства, если он и так связан с однозначно определенным объектом - окном, областью памяти или принтером, и зачем передавать дополнительно какую-то информацию об однозначно определенном объекте?

Для ответа на эти вопросы обратим внимание на свойство вывода в Windows, состоящее в том, что одними и теми же функциями осуществляется вывод на различные устройства. Строки программы:

Form1. Canvas. Ellipse (0, 0, 100, 100); и Printer. BeginDoc; Printer.Canvas. Ellipse (0, 0, 100, 100); Printer. EndDoc;,

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

Даже если рисовать только на поле формы, мы имеем дело с различными устройствами - нам неизвестно, какова графическая плата компьютера и каковы характеристики текущей установки настроек экрана. Например, имея в своем распоряжении более 16 миллионов цветов, приложение не заботится об отображении этой богатой палитры на экране, располагающем всего 256 цветами. Такие вопросы приложение перекладывает на плечи операционной системы, решающей их посредством использования драйверов устройств.

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

Справочный файл Win32 Programmer's Reference фирмы Microsoft, поставляемый в составе Delphi, o контексте устройства сообщает следующее "Контекст устройства является структурой, которая определяет комплект графических объектов и связанных с ними атрибутов и графические режимы, влияющие на вывод Графический объект включает в себя карандаш для изображения линии, кисть для закраски и заполнения, растр для копирования или прокрутки частей экрана, палитру для определения комплекта доступных цветов, области для отсечения и других операций, маршрут для операций рисования".

В OpenGL имеется аналогичное ссылке на контекст устройства понятие ссылка на контекст воспроизведения. Графическая система OpenGL, как и любое другое приложение Windows (хоть и размещенное в DLL), также нуждается в ссылке на устройство, на которое будет осуществляться вывод Это специальная ссылка на контекст воспроизведения - величина типа HGLRC (Handle openGL Rendering Context, ссылка на контекст воспроизведения OpenGL).

ПРИЛОЖЕНИЕ 2