- •Учебник
- •Оглавление
- •Введение
- •Глава 1
- •I. Установка
- •II. Удаление
- •Глава 2. Первый проект
- •Глава 3. Создание сцены в режиме design time
- •Создание объектов:
- •Глава 4. Примитивные объекты. Вкладка Basic geometry.
- •Глава 5. Ориентация, координаты.
- •Глава 6. Движение.
- •Глава 7. Как узнать, сколько сейчас fps?
- •Глава 8. Полноэкранный режим.
- •Глава 9. Работа с материалами.
- •I. Прямое обращение к .Material
- •Глава 10. Использование 3d моделей.
- •I. Форматы моделей
- •Глава 11. Прокси объекты.
- •Глава 12. Создание земной поверхности с glTerrainRenderer.
- •Глава 13. Создание земной поверхности с glFreeForm.
- •Глава 14. Итоги работы с glTerainrender и glFreeForm.
- •Глава 15. Создание земной поверхности с glHeightField.
- •Глава 15. Создание неба.
- •Глава 16. GlAtmosphere.
- •Глава 17. Спецэффекты.
- •I. Огонь
- •II. Молния
- •III. Дождь
- •IV. Снег
- •VI. Блики от источников света
- •Глава 18. Растительность.
- •I. Деревья и кустарники
- •II. Трава
- •Глава 19. Работа со шрифтами и вывод надписей.
- •I. Вывод текста через компонент glWindowsBitmapFont
- •II. Проблема с glWindowsBitmapFont в Windows Vista
- •Глава 20. Выделение объекта мышкой.
- •Глава 21. Создание сцены в режиме runtime.
- •Глава 22. Тени.
- •Глава 23. Туман.
- •Глава 24. Vbo или расширение arb_vertex_buffer_object в OpenGl.
- •Глава 25. Fbo или расширение ext_framebuffer_object в OpenGl.
- •Глава 26. Рисование на канве.
- •Глава 27. Использование чистого OpenGl.
- •Глава 28. Звуки.
- •I. Проигрывание звуков с помощью bass
- •II. Проигрывание звуков с помощью fmod
- •III. Проигрывание звуков с помощью OpenAl
- •Глава 29. Игровое меню.
- •Глава 30. Примитивная физика dce.
- •Глава 31. Физика ode.
- •II. Основы библиотеки ode(: tglodeManager и tglodeJointList) на примере создания подобия боулинга.
- •Глава 32. Физика Newton.
- •Глава 33. Ручная проверка коллизий.
- •V. Ручная проверка коллизии
- •Глава 34. Шейдеры. Терменология.
- •Глава 35. Шейдеры. История и компоненты.
- •Глава 36. Шейдеры glsl. Введение.
- •Глава 37. Шейдеры glsl. Использование без компонентов. Самый примитивный шейдер.
- •Глава 38. Шейдеры glsl. Немного о спецификации. Типы данных и переменные
- •Стандартные функции
- •Поддерживаемые компоненты векторов
- •Глава 40. Шейдеры glsl. Текстурирование.
- •Глава 41. Шейдеры glsl. Использование без компонентов. Мультитекстурирование. Смешение трёх цветов по базовой карте.
- •Глава 42. Шейдеры glsl. Использование через компонент glslShader. Часть первая – Первые шаги.
- •Глава 43. Шейдеры glsl. Использование через компонент glslShader. Часть вторая – знакомимся со светом. Передача параметров в шейдер.
- •Глава 44. Шейдеры glsl. Использование через компонент glslShader. Часть третья – текстуры.
- •Глава 45. RenderMonkey.
- •Глава 46. Оптимизация программы.
- •Глава 47. Практика. Создание мира
- •Приложение
- •I. Типы векторов и матриц
- •II. Работа с векторами
- •III. Работа с матрицами
- •IV. Методы объектов glScene
- •Предметный указатель по компонентам glScene
Глава 18. Растительность.
I. Деревья и кустарники
Деревья можно создавать через объект GLTree (Scene objects > Doodad objects > GLTree). Он предназначен для использования в стратегиях - дальность камеры обеспечит неплохой вид за минимум усилий. Несмотря на название, этот объект можно использовать и для создания кустарников. Рассмотрим его основные свойства.
Свойство |
Описание |
BranchAngle |
искривление ствола |
BranchAngleBias |
cмещение веток, чем меньше значение, тем ближе друг к другу ветки |
BranchFacets |
определяет, насколько “дёшево” будет рисоваться ствол |
BranchMaterialName |
имя материала, которым будет обтянут ствол |
BranchNoise |
увеличивает разброс веток и листьев друг от друга и между собой |
BranchRadius |
радиус ствола |
BranchSize |
размер дерева |
BranchTwist |
чем больше параметр, тем крона плотнее |
CenterBranchConstant |
количество листвы |
LeafBackMaterial |
материал, который будет натягиваться на заднюю часть листика. (Все материалы создаются в GLMaterialLibrary) |
LeafMaterialName |
имя материала, который будет натягиваться на переднюю часть листика |
LeafSize |
размер каждого листика |
LeafThreshold |
количество листвы на дереве |
Если смотреть на компонент “изнутри”, то стоит отметить использование вершинных массивов для оптимизации. И ещё одно, судя по комментариям в модуле GLTree.pas, деревья сделали для нас NVidia (http://developer.nvidia.com/object/Procedural_Tree.html), а разработчики сцены просто повторили то же на нашей любимой графической надстройке.
Вот такие деревья можно сделать.
А вот какой можно смастерить кустарник.
Однако реализация крупной растительности, поставляемая разработчиками GLScene является весьма плохой. Так невозможно получить тень; не получается использовать bumpmapping к стволу; у компонента отсутствует анимация как понятие вообще. Поэтому я рекомендую посмотреть вот это: http://www.glscene.ru/forum_viewtopic.php?15.37784.0#38300.
II. Трава
Очень часто в играх самых различных жанров встречается она - трава. Посмотреть пример, пусть и не самый новый и навороченный, можно здесь: http://www.glscene.ru/download.php?view.254
Глава 19. Работа со шрифтами и вывод надписей.
I. Вывод текста через компонент glWindowsBitmapFont
Кидаем на форму элемент GLWindowsBitmapFont, выбираем его свойство Ranges, появляется окошко, в котором нажимаем на кнопку «Добавить». Затем в свойствах StartASCII и StopASCII выбираем, с какого до какого номера будут отображаться символы, пусть будет от #0 до #255 (с #32 по #127 номера идут символы, цифры и английский алфавит; с #128 по #255 дополнительный алфавит). Что бы использовался именно русские буквы нужно у GLWindowsBitmapFont в свойстве Charset установить RUSSIAN_CHARSET.
В инспекторе объектов сцены выберите GLHUDText (Scene Objects->Add object->HUD objects-
>HUD text). Задайте какой-нибудь шрифт, например как в главе 12, укажите его в поле BitmapFont
объекта GLHUDText.
В поле text напишите нужный текст.
Чтобы надписи не перекрывались другими объектами, нужно делать их последним в иерархии объектов сцены.