Текст программы построен на основе предыдущей программы. Новые используемая команды -
glPushMatrix .. glPopMatrix, glFrustum (щелкните по интересующей Вас команде в тексте программы и в нижней части окна
получите подробную справку по этой команде). Так же появились скроллеры - теперь объект в Book3D
редакторе можно поворачивать.
1. Cоздание формы - OnCreate, в обработчике этого события находятся следующие строки - SetDCPixelFormat(Canvas.Handle) - задаем формат
пикселя обращаясь к описанной в этом же модуле пользовательской процедуре - procedure SetDCPixelFormat(hdc : HDC) - не забываем посмотреть всю
помощь щелкая мышью по гиперссылкам-командам OpenGL с интересующими Вас командами. Далее создаем контекст воспроизведения - wglCreateContext
(Canvas.Handle).
2. Событие-перерисовка OnPaint
отличается от предыдущих программ не
значительно - поэтому не будем повторятся -
рассмотрим только новые команды - сначало glPushMatrix .. glPopMatrix.
В отличии от команды glLoadIdentity (изученной ранее) эти команды позволяют запомнить любое
положение. А вот и простое объяснение на простом примере - играете в DOOM на сложном уровне:
дойдя до определенного участка игры - сохранились (glPushMatrix), если какой-то гад "укакошил"
вас - вы возвращаетесь на сохраненное место (glPopMatrix) и снова вперед. Но а если не
сохранились - ну тогда уровень сначало (glLoadIdentity). А теперь тоже самое - но техническим
языком: glPushMatrix - запоминает текущую систему координат, glPopMatrix - после многочисленных поворотов и перемещений
по 3D пространству возвращаемся на запомненное "место". Ну а glLoadIdentity - в нулевое положение.
Если не понятно - читай про игру снова. Следующая новая команда - glFrustum - определяет некий
"стеклянный аквариум" со всеми параметрами (см. справку по команде). Далее командой glTranslatef
(заметьте - теперь у неё 3 (и не только у неё) параметра - ведь это уже 3D графика) перемещаемся
вглубь "аквариума". И уже потом строим все остальное (уже изученными способами). Для эксперимента
попробуйте изменять различные параметры - при выходе за границы "аквариума" отсекается то что не
в "аквариуме". Как убедится? Если Вы еще не баловались скроллерами - изменить 3 параметр "-2.0" у третьей команды glVertex3f (у этой команды
комментарий "<-- параметр для изменения") - после достижения параметра больше "2.1" треугольник
как будто входит в невидимую стену - это и есть выход за пределы "аквариума" - отсечение. Если вы были внимательны то заметили,
что при перемещении скроллера сцена перерисовывается какими-то рывками - что это? - одинарная буферизация, как избежать этого
- двойной буферизацией (один из следующих уроков)!!!
При перемещении скроллеров вызывается процедура рисования OnPaint и поворачивается на значение смещения скроллера.
3. При корректном завершении работы программы OnDestroy происходит удаление контекста воспроизведения - wglDeleteContext(hrc).
1 способ (продвинутый):
1. Сохранить текст программы под любым именем в формате TXT - Программа / Сохранить код программы - в выпадающем списке диалога "Тип файла"
выбрать "Текстовый файл (*.txt)".
2. Открыть свои новый текстовый файл в любом редакторе и скопировать весь текст в буфер обмена.
3. Запустить Delphi и начать новый проект - все элементы имеют свои названия по умолчанию, поэтому Вам не следует изменять их - это
важно.
4. Перейти на вкладку проекта Events и выполнить двойной щелчок в полях OnCreate, OnDestroy и OnPaint.
Так же необходимо добавить 2 скроллера в любое место формы - панель инструментов Standart\ScrollBar и дважды щелкнуть по каждому скроллеру.
5. Перейти к тексту программы Unit1, стереть его весь и на его место вставить текст из буфера обмена, можно воспользоваться
комбинацией клавиш Ctrl+V.
6. Запустить Ваш новый проект - F9.
2 способ (быстрый):
1. Создать новую папку - здесь будет лежать Ваш новый проект. Например - PR1.
2. Из папки Book3D\MY_KOD скопировать в Вашу новую папку PR1 содержимое папки N13-16 (код для уроков с 13 по 16).
3. Сохранить текст программы под именем Unit1 в формате TXT в PR1 - Программа / Сохранить код программы - в выпадающем списке диалога "Тип файла"
выбрать "Текстовый файл (*.txt)".
4. Переименовать файл Unit1.txt в Unit1.pas - на вопрос "Заменить файл" - "ОК".
5. Запустить файл Project1.dpr из PR1 или запустить Delphi и открыть проект из PR1 - Project1.dpr.
6. Запустить Ваш новый проект - F9.
Если все сделали правильно - Вы получите тот же результат, что и в Book3D-редакторе.