Руководство новичка by JatStudio 2009 glscene руководство новичка, JatStudio, 2009
Скачать 0.63 Mb.
|
GLScene Руководство новичка by Jat-Studio 2009 GLScene руководство новичка , Jat-Studio, 2009 Содержание 1. Введение 2. Что такое GLScene ? 3. Установка GLScene 4. Как это работает ? 5. Первое приложение или « Привет мир !» 6. Основы 3D графики 6.1. Система координат 6.2. Числа с плавающей точкой 6.3. Векторы 6.4. Просчет сцены ( Рендеринг ) 6.5. OpenGL 7. Компоненты 7.1. GLScene 7.2. GLScene PFX 7.3. GLScene Utils 7.4. GLScene Shaders 8. Объекты 8.1. Общие свойства объектов 8.2. Базовая геометрия 8.3. Дополнительная геометрия 8.4. Объект Сетка (Mesh) 8.5. Объекты , построенные по точкам 8.6. Системы частиц 8.7. Объекты окружающего пространства 8.8. HUD объекты 8.9. GUI объекты 8.10. Специальные объекты 8.11. Безделушки (Doodad object) 8.12. Остальные объекты 9. Создание объектов во время выполнения приложения (Runtime) 9.1. Создание нового класса 10. Проба пера : 3D Тетрис 10.1. Дизайн 10.2. Структура 10.3. Класс T3DTBlock 10.4. Домашнее задание 11. Ссылки 12. Заключение GLScene руководство новичка , Jat-Studio, 2009 Введение Эта книга предназначена для любого , кто хочет быстро начать использование GLScene. Это не официальная документация по GLScene, за исключением комментариев непосредственно в исходном коде Я также настоятельно рекомендую использовать исходный код , как первичный источник информации Особенно учитывая тот факт , что исходный код постоянно модифицируется разработчиками Другой важный источник информации о GLScene – это демки . GLScene не так сложен , как кажется поначалу , но все же необходимо проявлять особое внимание и не « изобретать велосипед », когда вам понадобится что - то новое Я предупреждаю читателей , что я не разработчик GLScene, а всего лишь пользователь Если вы уже опытный пользователь GLScene, то вы сочтете этот документ слишком простым , но я рад любой обратной связи от вас Некоторые пункты учебника не описаны , так как я о них очень мало знаю Они будут помечаться маркером [ Нет данных ]. Jat-Studio, Ульяновск , август 2009 г Jat-Studio@yandex.ru GLScene руководство новичка , Jat-Studio, 2009 Что такое GLScene Вероятно , вы уже видели примеры использования GLScene, или даже работали в ней непосредственно Если сказать просто , то GLScene – это библиотека компонент Delphi для работы с графикой через OpenGL. OpenGL – это графический API, изначально разрабатываемый Silicone Graphics. OpenGL – это стандартная библиотека , которая установлена сегодня почти на каждом компьютере . GLScene делает создание и развитие OpenGL- приложений очень простым и легким . GLScene- приложения , сделанные в Delphi прежде всего предназначаются , прежде всего , для платформы Windows. Но есть клон GLScene для Kylix, делающий возможным портирование ( перенос ) приложений в Linux. Но я никогда этого не делал и не знаю , остаются ли все функции рабочими Нет поддержки у платформы Mac. GLScene был основан Майком Лишком (Mike Lischk) и с самого начала развивался как библиотека с открытым кодом (OpenSource) для сообщества программистов (Programmer’s Community). Позже проект принял Эрик Грандж (Eric Grange) и с тех пор этот проект устойчиво развивается Теперь есть множество администраторов GLScene. Официальный сайт GLScene http://www.sourceforge.net Есть бесчисленное количество объектов , созданных на GLScene, в пределах от простых демок до сложных научных приложений GLScene руководство новичка , Jat-Studio, 2009 Установка GLScene Желательно чтобы вы установили всю библиотеку GLScene. Это предоставляет вам выгоды наличия доступа к широкому диапазону демонстрационных приложений , дающих информацию по различным особенностям GLScene. Есть много способов получить код библиотеки Вы можете перейти по ссылке и загрузить последний код снимка здесь : http://glscene.sourceforge.net/download.htm Допустим исходники GLScene лежат у вас в • C:\library\GLScene Первый шаг : • Запустите Delphi. • Откройте Tools – Environment Options – Library. • Кликните по кнопке с тремя точками напротив Library path и добавьте все папки с GLScene. GLScene руководство новичка , Jat-Studio, 2009 • Кликните Ок для подтверждения • И еще раз Ок в предыдущем окне Теперь нужно подготовить нашу систему к запуску GLScene. Для этого в папке с GLScene ищем все файлы с расширением *.dll*. • Копируйте найденные файлы в папку Windows\system32. • Копируйте файл GLScene.inc из папки Source в папку с Delphi6.dpk GLScene руководство новичка , Jat-Studio, 2009 Теперь переходим в Delphi. По умолчанию Delphi создает чистый проект при запуске Он нам не нужен Закрываем все • Кликните File - Close All. Дальше расскажу о установке GLScene на Delphi6. Для другой версии Delphi просто подгоняйте под свое • Кликните File – Open и откройте файл GLScene6.dpk. • Компилируйте (compile) и установите (install) библиотеку Можете также установить другие компоненты ( какие есть ). Если все прошло нормально , то вид палитры компонент должен измениться : GLScene руководство новичка , Jat-Studio, 2009 Как это работает ? Вы , вероятно , привыкли к технологии Delphi VCL и созданию объектов во время проектировки (Design time). Проектирование Delphi- формы – прямая процедура Визуальные компоненты , что вы кидаете на форму , всегда видимы при проектировке В GLScene все немного не так Некоторые объекты во время проектирования не отображаются в принципе Эта глава объяснит философию и способы организации GLScene. Согласно соглашениям об именах Delphi каждый класс GLScene начинается с префикса TGL… Прежде всего , вы должны иметь ввиду , что GLScene, как и другие библиотеки Delphi, имеет строгую иерархию Каждый объект является потомком более общего объекта и содержит в себе некоторые новые свойства , по сравнению с родительским объектом Этот более общий объект также является потомком еще более общего и т д Эти отношения называют parent <-> child отношениями ( буквально – родитель <-> ребенок ). Каждый объект может иметь бесконечное множество потомков и только одного родителя Вершина дерева объектов – TGLScene, базовый класс , все остальные объекты – его потомки В иерархии GLScene есть одна очень интересная деталь Объект всегда имеет родителя и владельца Причем родитель и владелец не то же самое Владелец должен быть всегда TGLScene, потому , что регистрируется объект именно здесь Родитель же может быть другим объектом или классом TGLScene.Objects. На базовом уровне в GLScene есть два объекта : компоненты (Components) и объекты сцены (Scene objects). Компоненты расположены в четырех вкладках компонентов Могут быть помещены на форме и доступны только в инспекторе объектов (object inspector). Их можно рассмотреть как « сервисные компоненты », которые нужны для обслуживания сцены Объекты сцены могут быть добавлены , отредактированы или удалены в редакторе сцены (Scene editor). Объекты сцены фактически представляют собой все содержание отрисовываемой (rendering) сцены Объекты сцены также отображены в инспекторе объектов , но предпочтительнее работать с ними именно через редактор сцены Ну , хотя бы , потому что функциональные возможности здесь выше чем в инспекторе объектов Редактор сцены – это сердце GLScene. Чтобы открыть его необходимо сначала поместить на форму объект TGLScene. По двойному щелчку на нем открывается Редактор сцены Здесь вы можете добавить , выбрать , переместить или удалить объекты сцены , которые представлены с помощью древовидной структуры Вы также можете здесь видеть эффекты всех объектов и их поведение GLScene руководство новичка , Jat-Studio, 2009 Первое приложение или « Привет мир !» Много программных справочников содержат обязательный пример « Привет мир !». Это обычно простое приложение где пользователь нажимает кнопку и появляется окно с сообщением « Привет мир !». Это необходимо для читателей , которые хотят сразу же сделать что - то практически По - моему эквивалентом этому в трехмерном графическом программировании является отображение трехмерного вращающегося куба Здесь указано , шаг за шагом , создание подобного вращающегося куба в GLScene: 1. Создаем новое приложение в Delphi. 2. Двойным щелчком по GLScene добавляем GLScene1 – белый кубик на вкладке компонентов GLScene. 3. Двойным щелчком по GLSceneViewer добавляем GLSceneViewer1 – белый кубик с камерой на вкладке компонентов GLScene. 4. Выбираем alClient в свойстве Align объекта GLSceneViewer1 для того чтобы сцена развернулась во все окно 5. Двойным щелчком по GLCadencer добавляем GLCadencer1 – метроном на вкладке компонентов GLScene для синхронизации всех объектов GLScene. 6. Выбираем GLScene1 в свойстве Scene объекта GLCadencer1 для того чтобы метроном работал в нашей сцене 7. Двойным щелчком по GLScene1 на нашей форме открываем редактор сцены (Scene Editor). 8. Добавляем камеру – правый клик на Cameras в редакторе сцены – Add Camera. 9. Выбираем GLCamera1 и устанавливаем Position.X := 5, Position.Y := 5, Position.Z := 5 в свойствах объекта ; чтобы установить камеру за сценой 10. Правым кликом по Scene objects в редакторе сцены – Add object – LightSource добавляем на сцену источник света 11. Выбираем GLLightSource1 и устанавливаем Position.Z := 10 в свойствах для того чтобы источник света был подальше от объекта , чем камера 12. Правым кликом по Scene object в редакторе сцены – Add object – Basic Geometry – Cube добавляем в середину сцены кубик 13. Выбираем GLCamera1 и устанавливаем TargetObject := GLCube1 в свойствах объекта чтобы наша камера « смотрела » на куб 14. Выбираем GLSceneViewer1 и устанавливаем Camera := GLCamera1 чтобы в окне отображалось то , что « видит » наша камера 15. Двойным щелчком по GLCube1 в Object TreeView создаем событие Progress нашего кубика 16. Добавляем в событие строчку кода : GLCube1.TurnAngle := GLCube1.TurnAngle + deltaTime * 100; чтобы наш кубик вращался вокруг оси Z. 17. Можете нажать F9 и увидеть ваш первый крутящийся куб ! Вы можете сказать , что вращающийся куб – тривиальная вещь И это действительно так с GLScene, но если рассмотреть то , что требуется , чтобы отрисовать вращающийся куб на современных аппаратных средствах и операционной системе без GLScene, то станет ясно , какую работу сделали за нас разработчики этой библиотеки В GLScene несколько тысяч строк программы Конечно , не все это используется , чтобы отрендерить вращающийся куб , но , кроме этого , мы имеем еще и код OpenGL со всеми возможными драйверами Таким образом , мы обладаем управлением самой вершиной этой системы , чтобы например отрендерить вращающийся куб с помощью лишь одной строчки кода GLScene руководство новичка , Jat-Studio, 2009 Основы трехмерной графики GLScene – очень мощный инструмент , но вы должны знать хоть что - то о трехмерной графике для работы с ним Можете пропустить эту главу , если вы знакомы с этой темой Есть много теории о трехмерной графике Я хочу указать лишь некоторые основные вещи , которые необходимы при использовании GLScene. Система координат . Трехмерный мир описывается математически с помощью трех осей X, Y и Z. Все они пересекаются в некоторой точке ( начале отсчета ) с координатами [0, 0, 0] под углом 90° друг к другу Ориентация этих осей в пространстве может сначала немного запутать вас Математически оси распределены так : направление вверх - вниз – ось Y, влево - вправо – ось X и глубина – ось Z. Но стандарт OpenGL немного другой : направление вверх - вниз – ось Z, влево - вправо – ось X и , наконец , ось Y – глубина Таким образом , вы должны помнить , что система координат OpenGL отлична , например , от других трехмерных графических редакторов Вы можете включить отображение осей установкой свойства ShowAxes := True у любого объекта сцены Они будут представлены красными , синими и зелеными пунктирными линиями , как во время разработки , так и в запущенных проектах Некоторые объекты все же , используют обычную систему координат – например TGLGraph или TGLTerrainRenderer. И наконец , расположение осей будет зависеть от поворота камеры Вы можете поместить ваш объект в любом месте сцены и с любой ориентацией По умолчанию объект при создании направлен « лицом » в положительную сторону оси Y. А вершина ( верх ) объекта направлена в положительную сторону оси Z. Важно понять различие между глобальной и местной ( локальной ) системой координат У каждого дочернего объекта GLScene есть своя собственная местная ( локальная ) система координат Если родительский объект изменяет свое положение ( позицию ) или поворачивается на определенный угол , то глобальное положение как родителя , так и ребенка изменится , хотя местная ( локальная ) система координат каждого объекта останется без изменений Поначалу этот момент кажется непонятным , но это важная особенность , которая позволяет сохранять организацию иерархии объектов сцены Числа с плавающей точкой . OpenGL использует одинарную (single) систему точности Что это означает ? Это означает , что каждое десятичное число имеет длину 8 бит Рассмотрим это подробнее Реальные десятичные числа могут иметь неограниченное количество цифр после десятичного разделителя ( обычно запятая ). Взять например константу π ( Пи ). Компьютер способен вычислить число π ( Пи ) со множеством знаков после запятой , количество которых зависит от способностей памяти конкретной машины Но это не очень практично Так какой же установить предел ? Думаю , каждый может понять различие между 3.14 и 3.1415926535. Delphi имеет мощную поддержку различных типов В Delphi y нас есть такие типы для представления десятичных чисел , как single, double и extended. Тип single 8 битов длиной , то есть для хранения числа используется блок памяти размером 8 бит Количество цифр в таком числе ограничено Константа π ( Пи ) вида 3.1415926 имеет формат типа single. Но что случится , если добавить к этому числу , например 1000? Результат должен быть 3000.1415926, но в этом числе слишком много цифр для формата типа single. В этом случае урезаются « лишние » последние цифры в числе и результат будет таким : 3000.1415. Помните , работая с большими числами , что тип single недостаточно точен Если вам нужна дополнительная точность при вычислениях , например при каких - либо научных расчетах , то можете использовать тип extended, чтобы получить бòльшую точность Но если используется графический вывод OpenGL, то все числа с типом extended понизят свою точность до точности типа single. GLScene руководство новичка , Jat-Studio, 2009 Не рекомендуется использовать стандартный математический модуль в приложениях , использующих библиотеку GLScene. Так как функции этого модуля слишком медленны для просчета при отрисовке сцены в режиме реального времени Поэтому по - возможности избегайте использовать этот модуль Векторы |