- •Учебник
- •Оглавление
- •Введение
- •Глава 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
Глава 13. Создание земной поверхности с glFreeForm.
Земную поверхность можно создавать не только с использованием GLTerrainRenderer или GLHeightField, но так же и через GLFreeForm. Работа с последним рассмотрена в главе 10, и поэтому я не хочу ничего добавлять. Использование GLFreeForm даёт ряд преимуществ. Например, возможность создавать настоящие отвесные склоны, гроты и т.д.
Обсуждение данной темы активно идёт на http://www.glscene.ru/forum_viewtopic.php?6.34065.0
Глава 14. Итоги работы с glTerainrender и glFreeForm.
Сейчас я хочу подвести итог работы с двумя компонентами GLScene - это GLTerainrender и GLFreeForm. Скажу сразу, GLFreeForm обеспечивает большую производительнось.
Почему же так? Для ответа обратимся к истории.
GLTerainrender разрабатывался на заре этого века и это наложило свой отпечаток на всю его работу. Итак, что же было такое было в те далёки, а может и не столь далёкие времена. Первое, Видеокарты бывало имели в распоряжении по 4mb оперативной памяти и весь ландшафт туда попросту не помещался. Второе, производительность видеокарт была невпример низкая по сравнению с производительностью центральных процессоров. Приходилось отправлять данные туда на обработку. Третие, скорость передачи из видеокарты остальным частям компьютера и обратно была весьма маленькой. Но делать это всё равно было выгоднее в плане производительности.
Со временем ситуация очень значительно изменилась. А именно: Первое, объём оперативной памяти на видеокартах исчесляется гигобайтами. Второе, производительность видеокарт значительно превсходит мощности центрального процессора одного ценового диапозона. А вот скорость передачи данных из GPU другим частям компьютера и обратно значительно не увеличилась. Именно это обстоятельство делает GLTerainrender совершенно непригодным для использования.
Теперь чтобы эффективно использовать ресурсы компьютера необходимо оставить данные на GPU и там же производить обработку. Именно так и делает GLFreeForm.
Кроме того есть и менее значительные особенности GLFreeForm. Но они тоже говорят в пользу выбора именно его.
Одной из таких особенностей является использование технологии Ocree. С её помощью можно легко отбросить невидимые части визуализируемого ландшафта. Кстати, в таком случае рекомендуется сначало проверять дальность каждого параллелепипеда, входящего в окрии дерево, на предмет удалённости от камеры на значение Camare.DepthOfView. И сразу отсекать подобные части. Это нужно сделать дабы избежать двойных проверок: сначало проверка на расстояние от камеры, потом проверка окрии.
Ещё одна особенность это возможность загрузки созданных в профессиональных редакторах (таких как 3DS MAX) моделей. Ведь там легко можно создать ландшафт по той же карте высот и, например, сразу натянуть на него текстуру. Получается очень удобно.
Глава 15. Создание земной поверхности с glHeightField.
Компонент представлен в виде двухмерной сетки, на каждую клетку этой сетки можно натянуть отдельную текстуру, однако можно натянуть текстуру и на всю сетку. Он (компонент) обеспечивает легкое создание трехмерной поверхности, описывающей зависимость z = f(x,y). Таким образом, поверхность при проецировании на плоскость Oxy не имеет самопересечений. Ярким примером являются игры из разряда мморпг, где положение игроков определяются двумя координатами для построения более простой системы коллизий и наглядного представления карты мира, который становится двухмерным. Создавать компонент совсем несложно, что мы сейчас и увидим:
Кидаем на форму GLScene (инспектор объектов сцены), в нём создаём камеру, присваиваем свойство Position.Z равным 5.
Поместите так же GLSceneViewer, свойству Camera присваиваем нашу камеру
А теперь создаём в инспекторе объектов сцены компонент GLHeightField (Scene Objects > Graph-plotting objects > GLHeightField)
После создания компоненту нужно задать свойства
XSamplingScale и YSamplingScale, где
Свойство |
Описание |
XSamplingScale.max |
продолжительность ландшафта по положительным координатам оси абсцисс, т.е. вправо |
XSamplingScale.min |
продолжительность ландшафта по отрицательным координатам оси абсцисс, т.е. влево |
XSamplingScale.Step |
задаёт “шаг” смещения, т.е. насколько ландшафт будет размыт по горизонтали |
YSamplingScale.max |
продолжительность ландшафта по положительным координатам оси ординат, т.е. вверх |
YSamplingScale.min |
продолжительность ландшафта по отрицательным координатам оси ординат, т.е. вниз |
YSamplingScale.Step |
задаёт “шаг” смещения, т.е. насколько ландшафт будет размыт по вертикали |
Хорошую демку можно посмотреть в стандартной папке Demos по адресу Demos\graph\heightfield