Использование библиотеки DGLUT: примитивы DGLUT

Текст программы построен на основе предыдущей программы. Но сейчас Ваше воображение заработает с ужасающей скоростью - Вашему вниманию предложена библиотека DGLUT! Что это такое? - а вот простое объяснение - до этого что-бы построить хоть какой-то 3D-объект нам приходилось: делать все с нуля - короче еще проще объяснение: ДОМ - что-бы его построить нужно замесить глину, наформовать кирпичи, обжечь их - и уж потом начинать само строительство. Используя DGLUT у Вас уже есть различные кирпичи и даже целые строительные блоки - примитивы DGLUT - только строй!!!


При запуске программы последовательно происходит 4 действия:

1. Cоздание формы - OnCreate, в обработчике этого события находятся строки отвечающие за настройку интерфейса: настройка скроллеров (значение от -180 до 180, один прижат вниз, другой к левому краю формы) и сама форма размером 400 на 400 пикселей (Form1.Width := 400 и Form1.Height := 400) на которой вольготно расположилась Panel (на поверхности которой и будет все рисоваться) занимая всю форму (Panel1.Align := alClient), далее в переменную DC получаем ссылку на устройство на котором будем рисовать - рисуем на поверхности компонента Panel1, уже знакомая процедура SetDCPixelFormat(DC) возвращает формат пикселя устройства Panel1, но необходимо заметить, что установлением флага pfd.dwFlags указываем OpenGL, что рисуем на поверхности компонента используя двойную буферизацию - проще это объяснить так: просим, что хотим - получаем что есть (но по максимуму). И тем что есть пользуемся - wglCreateContext(DC) - соглашаемся этим что-то пользоваться и пользуемся - wglMakeCurrent(DC,hrc). Далее включаем свет - и опять простое объяснение: даем понять программе, что будем использовать свет - glEnable ( GL_LIGHTING ), только один источник - glEnable ( GL_LIGHT0 ) и включаем свет - glEnable ( GL_DEPTH_TEST ).
2. Событие FormResize устанавливает видовые параметры - glMatrixMode, далее знакомые команды и новая команда - InvalidateRect (см.справку по командам). Пока не стоит сильно думать, что это здесь делается - оставте на потом!
3.Событие-перерисовка OnPaint отличается от предыдущих программ наличием BeginPaint...EndPaint - здесь все просто: при выполнении BeginPaint(Panel1.Handle,ps) - выводится изображение на поверхность компонента Panel1 - но в невидимый буфер, как только все нарисовано - выводим невидимый буфер на экран - SwapBuffers(DC) и разрешаем окно перерисовать (обновить) - EndPaint.
4. При корректном завершении работы программы OnDestroy происходит возврат на круги своя - все, что получили возвращается в исходное состояние - все ссылки и контекст удаляются. Прочитав справочную информацию и так все поимете (щелкая мышью по гиперссылкам-командам OpenGL с интересующими Вас командами).
к оглавлению к оглавлению


Для переноса кода программы в Delphi необходимо выполнить следующие действия:

1. Сохранить текст программы под любым именем в формате TXT - Программа / Сохранить код программы - в выпадающем списке диалога "Тип файла" выбрать "Текстовый файл (*.txt)".
2. Открыть свои новый текстовый файл в любом редакторе и скопировать весь текст в буфер обмена.
3. Запустить Delphi и начать новый проект - все элементы имеют свои названия по умолчанию, поэтому Вам не следует изменять их - это важно.
4. Перейти на вкладку проекта Events и выполнить двойной щелчок в полях OnCreate, OnDestroy, OnPaint и OnResize. Так же необходимо добавить 2 скроллера в любое место формы - панель инструментов Standart\ScrollBar и дважды щелкнуть по каждому скроллеру. И не забудьте добавить компонент Panel - рисуется все на его поверхности.
5. Перейти к тексту программы Unit1, стереть его весь и на его место вставить текст из буфера обмена, можно воспользоваться комбинацией клавиш Ctrl+V.
6. Запустить Ваш новый проект - F9.
Если все сделали правильно - Вы получите тот же результат, что и в Book3D редакторе.

к оглавлению к оглавлению