Пример рисования на поверхности визуального компонента.
(пример 10, часть 2). {**********************************************************************} program Dots; uses Forms, Unit1 in 'Unit1.pas' {frmGL}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TfrmGL, frmGL); Application.Run; end.
{**********************************************************************} unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL; type TfrmGL = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormDestroy(Sender: TObject); private hrc: HGLRC; end; var frmGL: TfrmGL;
implementation {$R *.DFM} {==========================================Перерисовка окна} procedure TfrmGL.FormPaint(Sender: TObject); begin wglMakeCurrent(Canvas.Handle, hrc); glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета glPointSize (20); // размер точек glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов glBegin (GL_POINTS); // открываем командную скобку glVertex2f (-1, -1); glVertex2f (-1, 1); glVertex2f (0, 0); glVertex2f (1, -1); glVertex2f (1, 1); glEnd; // закрываем командную скобку SwapBuffers(Canvas.Handle); // содержимое буфера - на экран wglMakeCurrent(0, 0); Canvas.Brush.Color:= clGreen; Canvas.Ellipse (10, 10, 50, 50); end; {==============================================Формат пикселя} procedure SetDCPixelFormat (hdc: HDC); var pfd: TPixelFormatDescriptor; nPixelFormat: Integer; begin FillChar (pfd, SizeOf (pfd), 0); pfd.dwFlags:= PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; nPixelFormat:= ChoosePixelFormat (hdc, @pfd); SetPixelFormat (hdc, nPixelFormat, @pfd); end; {=============================================Создание формы} procedure TfrmGL.FormCreate(Sender: TObject); begin SetDCPixelFormat(Canvas.Handle); hrc:= wglCreateContext(Canvas.Handle); end; {=================================Завершение работы приложения} procedure TfrmGL.FormDestroy(Sender: TObject); begin wglDeleteContext(hrc); end; end. {**********************************************************************}
Приложение 3. Ссылки на Интернет-ресурсы по использованию библиотек OpenGL в программировании графики. http://www.opengl.org http://gl.satel.ru http://www.sgi.com/software/opengl www.opengl.org.ru/ - Подборка материалов книг, документации, учебников. Примеры программ написанных с использованием OpenGL. opengl.gamedev.ru/ - Программирование компьютерной графики средствами OpenGL. Документация, статьи, советы. www.codenet.ru/progr/opengl/ - Минимальная программа OpenGL. Введение в OpenGL. nehe.gamedev.net/ - главная страница компании NeHe, учебники, ресурсы. www.rsdn.ru/article/opengl/ogltut2.xml - Учебное пособие по OpenGL. www.citforum.ru/programming/opengl/index.shtml - книга Игоря Тарасова «OpenGL». Форум Стандаpт визуализации OpenGL. pmg.org.ru/nehe/ - OpenGL - уроки от NeHe: переводы по OpenGL, трехмерная графика, игры, мультимедия Translations Russian OpenGL. www.firststeps.ru/mfc/opengl/opengl1.html - первые шаги в создании программы с OpenGL www.bib.com.ua/cat_art28.html - руководство по написанию программ.
Библиографический список. 11. Боресков А. Графика трехмерной компьютерной игры на основе OpenGL. – М.: Диалог-МИФИ, 2005. 12. Гашников М. и др. Методы компьютерной обработки изображений. - М.: Физматлит, 2001. 13. Павлидис Т. Алгоритмы машинной графики и обработка изображений. - М.: Радио и связь. 1986. 14. Петров М. Компьютерная графика. Учебник для вузов. - СПб.: Питер, 2002. 15. Рейбоу В. Компьютерная графика. Энциклопедия. - СПб.: Питер, 2002. 16. Роджерс Д. Алгоритмические основы машинной графики. - М.: Мир, 1989. 17. Снижко Е. Компьютерная геометрия и графика: Конспект лекций. – СПб.: Изд. БГТУ, 2005. 18. Шикин Е., Боресков А. Компьютерная графика. Динамика, реалистические изображения. - М.: Диалог - Мифи, 1985. 19. Шикин Е., Боресков А. Компьютерная графика. Полигональные модели. – М.: Диалог-МИФИ, 2005. 20. Эйнджел Э. Интерактивная компьютерная графика. Вводный курс на базе OpenGl. - М.: Изд. Дом «Вильямс», 2001. 21. Херн Д., Бейкер М. Компьютерная графика и стандарт OpenGL. – М.: Изд. Дом «Вильямс», 2005. Оглавление.
Предисловие.. 3 Лабораторная работа № 1. Подключение библиотек; контекст устройства, контекст воспроизведения; общий вид программы. 4 Цель работы. 4 Необходимые теоретические сведения. 4 Основные понятия, используемые в данной лабораторной работе: контекст устройства, контекст воспроизведения, формат пиксела. 5 Порядок выполнения работы. 5 Контрольные вопросы. 18 Лабораторная работа № 2. Примитивы OpenGL, основные приемы построения двумерных объектов. 18 Цель работы. 18 Необходимые теоретические сведения. 18 Командные скобки. Использование функций glBegin и glEnd. 19 Аргументы функции glBegin. 20 Включение и отключение режима сглаживания (антиэлайзинг). 20 Вывод точек в OpenGL. 21 Линии: одиночные, ломаные, замкнутые ломаные. 22 Вывод треугольников: одиночные треугольники, ленты треугольников, веера треугольников. 23 Вывод четырехугольников. 25 Рисование полигонов, передние и задние грани полигонов. 25 Построение невыпуклых полигонов. 26 Особенности режимов закрашивания для многоугольников. 27 Задания к лабораторной работе. 27 Варианты к заданию. 29 Дополнительные задания. 30 Контрольные вопросы. 30 Лабораторная работа № 3. Использование массивов вершин. Преобразования координат. 31 Цель работы: 31 Порядок выполнения лабораторной работы. 31 Необходимые теоретические сведения. 31 Массивы вершин. 31 Включение/выключение режима. 31 Заполнение массива вершин. 32 Команды рисования. 33 Геометрические преобразования. 33 Матрица моделирования. 34 Преобразование переноса: 34 Преобразование поворота: 34 Преобразование масштабирования: 35 Задания к лабораторной работе. 36 Варианты к заданиям. 37 Дополнительные задания. 37 Контрольные вопросы. 38 Лабораторная работа № 4. Трехмерные построения. Буфер глубины. Видовые параметры. Параллельная и перспективная проекции. 38 Цель работы. 38 Порядок выполнения работы. 38 Необходимые теоретические сведения. 39 Трехмерные координаты. 39 Буфер глубины. 39 Проекции. 40 Видовые параметры. 40 Место команд в программе. 41 Матрица проецирования. 42 Задания к лабораторной работе. 43 Варианты заданий. 44 Дополнительные задания. 45 Контрольные вопросы. 45 Лабораторная работа № 5. Квадрик-объекты. Камера. 46 Цель работы. 46 Порядок выполнения работы. 46 Необходимые теоретические сведения. 46 Квадрик-объекты. 47 Перспектива. 50 Моделирование камеры. 50 Задания к лабораторной работе. 51 Варианты к заданиям лабораторной работы. 52 Дополнительные задания. 53 Контрольные вопросы. 53 Лабораторная работа № 6. Освещение. 54 Цель работы. 54 Порядок выполнения работы. 54 Необходимые теоретические сведения. 54 Модель освещения. 55 Фоновый, диффузный, зеркальный и исходящий свет. 56 Цвет материала и света. 57 Включение фонового освещения. 59 Задание параметров материала. 59 Создание, позиционирование и включение одного или более источников света. 60 Параметры источника света. 62 Цвет. 63 Позиция и ослабление. 63 Задания лабораторной работе. 64 Варианты к заданию лабораторной работы. 65 Дополнительные задания. 65 Контрольные вопросы. 66 Лабораторная работа № 7. Текстуры: режимы фильтрации, режимы взаимодействия текстуры с накладываемым объектом, автоматическая генерация текстурных координат. 66 Цель работы. 66 Необходимые теоретические сведения. 66 Подготовка изображения для использования в текстуре. 67 Создание текстуры.. 68 Использование текстуры. 74 Пример наложения текстуры с растяжением на прямоугольный объект. 76 Пример наложения текстуры на треугольник. 76 Пример мозаичного(тайлового) покрытия текстурой. 77 Пример создания с помощь текстур эффекта отражения. 78 Задания к лабораторной работе и порядок выполнения. 78 Контрольные вопросы. 79 ПРИЛОЖЕНИЯ. 81 Приложение 1. Минимальный код программы OpenGL на C++. 81 Приложение 2. Минимальный код программы для использования OpenGL в программе на Delphi. 84 1) Оконное приложение. 84 2) Консольное приложение. 85 3) Пример рисования на поверхности визуального компонента. 88 Приложение 3. Ссылки на Интернет-ресурсы по использованию библиотек OpenGL в программировании графики. 89 Библиографический список. 90
[1] Лабораторные работы практикума могут выполняться в среде визуального программирования Delphi. В Приложении 2 содержатся варианты минимальной программы OpenGL на Delphi.
[2] В программе на C++ указатель записан в виде &pfd, в программе на Delphi следует записать @pfd. [3] В Delphi вместо символа «|» используется «or». [4] В Delphi шаблон запишется в виде, например $F0F0. [5] В Delphi переменную-указатель на квадрик-объект объявляют так quadricObj: GLUquadricObj;
|