![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Глава 12. Создание земной поверхности с glterrainrendererСодержание книги
Поиск на нашем сайте
Один из способов создания поверхности земли — это использование GLTerrainRenderer (Mesh objects — TerrainRenderer). Особенностью GLTerrainRenderer является то, что он поддерживает некоторые технологии оптимизации, такие как ROAM и LOD. Однако обычно чаще используется GLFreeForm, т. к. он имеет развитые средства проверки пересечений и в нем можно хранить не только одну поверхность, но и здания, деревья и другие объекты. Поверхность создается из прямоугольной плоскости, разбитой на множество треугольников по типу сетки. Затем узлы этой сетки поднимаются на нужную высоту, которую GLTerrainRenderer получает из компонентов HDS (Height Data Source) с вкладки GLScene HDS. Самым распространенным и удобным является GLBitmapHDS GLBitmapHDS
Работает он так: в него загружается картинка в оттенках серого, на которой нарисован рельеф, причем чем светлее пиксел картинки, тем выше будет соответствующая ему точка. Затем GLTerrainRenderer создаёт поверхность по этой картинке. Создадим поверхность программно: // Максимальный размер карты: GLBitmapHDS1.MaxPoolSize:=8*1024*1024; GLBitmapHDS1.Picture.LoadFromFile('имя файла.bmp'); GLTerrainRenderer1.HeightDataSource:=GLBitmapHDS1; GLTerrainRenderer1.Material.Texture.Image.LoadFromFile('файл текстуры'); GLTerrainRenderer1.Material.Texture.Enabled:=true; // Повернем Terrain, чтобы земля была горизонтальной: GLTerrainRenderer1.Direction.SetVector(0,1,0); GLTerrainRenderer1.Up.SetVector(0,0,1); GLTerrainRenderer1.Scale.SetVector(1,1,0.02);
GLTerrainRenderer бесконечно протяженный ландшафт. Если необходимо ограничить размер карты, поставьте свойство InfiniteWrap объекта GLBitmapHDS в значение False. GLCustomHDS
Код, который накладывает текстуру, содержится в методе StartPreparingData объекта GLCustomHDS Глава 13. Итоги работы с GLTerrainRenderer и GLFreeForm
Сейчас я хочу подвести итог работы с двумя компонентами GLScene - это GLTerainrenderer и GLFreeForm. Скажу сразу, GLFreeForm обеспечивает большую производительность. Почему так? Для ответа обратимся к истории. GLTerrainRenderer разрабатывался на заре этого века, и это наложило свой отпечаток на всю его работу. Что же было в те далёкие, а может и не столь далёкие времена? Первое, видеокарты обычно имели в распоряжении по 4 МБ памяти и весь ландшафт туда попросту не помещался. Второе, производительность видеокарт была невпример низкая по сравнению с производительностью центральных процессоров. Приходилось отправлять данные туда на обработку. Третие, скорость передачи из видеокарты к остальным частям компьютера и обратно была весьма маленькой. Но делать это всё равно было выгоднее в плане производительности.
Со временем ситуация значительно изменилась. А именно: первое, объём памяти на видеокартах теперь исчисляется гигобайтами. Второе, производительность видеокарт значительно превсходит мощности центрального процессора одного ценового диапозона. А вот скорость передачи данных из GPU другим частям компьютера и обратно значительно не увеличилась. Теперь чтобы эффективно использовать ресурсы компьютера необходимо оставить данные на GPU и там же производить обработку. Именно так и делает GLFreeForm. Есть и менее значительные особенности GLFreeForm, но они тоже говорят в его пользу. Одной из таких особенностей является использование технологии Octree. С её помощью можно легко отбросить невидимые части ландшафта. Ещё одна особенность это возможность загрузки созданных в профессиональных редакторах (таких как 3DS MAX) моделей. Ведь там легко можно создать ландшафт по той же карте высот и, например, сразу поместить на него сооружения и растительность. Получается очень удобно. В настоящее время существует альтернативная версия класса TGLTerrainRenderer – это TGLVBOTerrainRenderer, который использует для визуализации ландшафта буфера вершинных массивов и лишён некоторых недостатков. Скачать обновлённый модуль GLTerrainRenderer.pas, в котором содержатся оба класса можно здесь: http://www.glscene.ru/forum_viewtopic.php?8.63630 Единственным недостатком используемого алгоритма является то, что не проводится вообще никаких оптимизаций при отрисовке. Глава 14. Создание неба
В GLScene есть специальные объекты для рисования неба: GLSkyDome GLSkyDome GLSkyDome
Свойства звезд:
Программно можно добавить определенное количество случайно расположенных звезд: GLSkyDome1.Stars.AddRandomStars(100, RGB(200,200,150), true); Первый параметр определяет количество звезд, второй цвет, третий указывает, где должны быть расположены звезды (true — только над горизонтом, false — по всей сфере). GLEarthSkyDome GLEarthSkyDome
GLSkyBox
GLSkyBox Свойства:
Глава 15. GLAtmosphere
GLAtmosphere — это полусфера, которая нужна для создания эффекта атмосферы вокруг планеты. Однако его можно приспособить под отображение, например, силовых полей, но только шарообразной формы. Компонент представляет собой шар с двумя смешанными цветами, внутри находится сфера — «планета». Создаётся GLAtmosphere в Environment objects. Основные свойства:
Демку можно посмотреть в стандартной папке Demos по адресу Demos\specialsFX\Atmosphere.
Глава 16. Системы частиц Огонь
Огонь моделируется системой частиц — партиклов (particle). Создайте стандартный проект, поместите на форму GLFireFXManager Свойства огня настраиваются и в GLFireFXManager:
Программно назначить огонь можно так: TGLBFireFX(GLCube1.AddNewEffect(TGLBFireFX)).Manager:=GLFireFXManager1 Это всё! Теперь можно играться с параметрами для достижения приемлимой производительности и хорошего качества. Чтобы было удобнее это делать, скачайте эту программу: http://glscene.ru/download.php?view.328 GLFireFXManager — не самый скоростной компонент, поэтому вместо него лучше использовать общие системы частиц. Молния
Поместите на форму GLThorFXManager Свойства молнии настраиваются в GLThorFXManager:
Визуально редактировать параметры можно в этой программе: glscene.ru/download.php?view.333. В runtime молния создается аналогично огню, только эффект имеет тип TGLBThorFX. Дождь
Для создания «простого» дождя будем использовать систему частиц (PFX renderer). Основной ее недостаток — игнорирование освещения, что заметно при взгляде на дождь сверху. Создайте в сцене GLDummyCube (источник частиц) и GLParticleFXRenderer (Particle Systems — PFX Renderer), а на форме GLPointLightPFXManager из вкладки GLScene PFX и GLCadencer, который подключите к менеджеру. Теперь расположим объекты: GLCamera1 в (0;0;8), а GLDummyCube1 в (0;3;0).
Настройки менеджера:
Эффекта:
Параметры выставлены. Теперь запишите в GLCadencer такую строчку: GLSceneViewer1.Invalidate; Если этого не сделать, то, т. к. мы ничего не делаем с объектами сцены, частицы будут перерисовываться только если изменять размер формы или задвигать её за пределы экрана. Снег
Делаем то же, что и для создания дождя, только изменим эти настройки менеджера:
Здесь тоже надо обновлять GLSceneViewer! Иллюстрации: Дым
Клубы пара создаются с помощью PerlinPFX. Он отличается от PointLightPFX тем, что у PointLightPFX частицы имеют вид просто градиентно залитые кружки, а PerlinPFX к ним добавляется еще случайный шум. Сделаем то же, что и в предыдущих случаях, только с нужным менеджером. У менеджера выставим:
У эффекта:
Симпатичный дымок, не правда ли! При большом количестве частиц компонент требует невыносимо много ресурсов! Глава 17. Спецээффекты Блики от источников света
Очень красивый эффект даёт использование GLLensFlare (Special Objects — LensFlare) — это имитация бликов от источника света, которые обычно возникают при съемке на видеокамеру.
Визуальный редактор: http://glscene.ru/download.php?view.332.
Перед некоторыми объектами LensFlare становится невидимым, чтобы этого избежать, поставьте свойства AutoZTest = false, FlareIsNotOcculed = true. После этого он будет рисоваться как и все объекты, в порядке расположения в иерархии. GLBlur
Этот эффект непосредственно связан с освещением и делает объекты светящимися. Данный эффект не использует шейдеров. Так же учтите, что blur-эффект и bloom-эффект это не одно и тоже! Очень важно знать меру применению GLBlur, т. к. он ресурсоемок. Попробуем создать проект с его использованием. Создайте стандартный проект, переместите камеру в (0; 0; 2). Также создайте куб и GLCadencer, а в OnProgress запишите: GLCube1.TurnAngle:=newTime*90; Теперь добавьте в сцену GLBlur (он в Special objects) и установите у него Preset в pDream. Хорошие примеры вы можете найти здесь: Demos\rendering\Blur и BlurAdvanced. GLMotion blur
Этот эффект обозначает смазывание изображения при движении объекта. Принцип действия заключается в том, что через определенные промежутки времени картинка с экрана копируется в буфер, делается немного прозрачной и добавляется к новой картинке. Вот описание некоторых свойств компонента GLBlur:
По нему тоже есть стандартная демка: Demos\specialFX\motionblur. Глава 18. Растительность
Деревья можно создавать через объект GLTree (Doodad objects — GLTree). Он предназначен для использования в стратегиях — дальность камеры обеспечит неплохой вид за минимум усилий. Несмотря на название, этот объект можно использовать и для создания кустарников. Основные свойства.
Если смотреть на компонент «изнутри», то стоит отметить использование вершинных массивов для оптимизации. И ещё одно — судя по комментариям в модуле GLTree.pas, деревья сделала для нас NVidia (http://developer.nvidia.com/object/Procedural_Tree.html), а разработчики сцены просто повторили то же. Однако реализация является весьма несовершенной. Так, невозможно получить тень; не получается использовать bumpmapping к стволу; у компонента отсутствует анимация как таковая. Поэтому я рекомендую посмотреть это: glscene.ru/forum_viewtopic.php?15.37784.0#38300.
Очень часто в играх самых различных жанров встречается трава. Я приведу несколько ссылок на примеры и статьи, хотя на GLScene делалась только одна.
Пример для GLScene. Отличный метод, хотя сложный в понимании без должного описания. http://www.glscene.ru/download.php?view.254%20%20 Есть статья на эту тему, хотя результатом я не доволен: http://steps3d.narod.ru/tutorials/grass-tutorial.html Вот еще кое-что весьма занимательное: процесс создания прекрасной травки в игре ARMA2: http://www.bistudio.com/developers-blog/arma2-vegetation-progress_en.html И неофициальный перевод этой статьи: http://armedassault.kiev.ua/forums/forum41/thread1234.html Про саму игру ARMA2 смотрите здесь: http://www.ag.ru/games/armed_assault_2 Статья с большим названием — «Рендинг Травы в Реальном Времени с Динамическим Освещением»: http://www.kevinboulanger.net/grass.html
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-19; просмотров: 499; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.123.182 (0.014 с.) |