Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по GLScene.doc
Скачиваний:
255
Добавлен:
16.12.2018
Размер:
7.18 Mб
Скачать

Глава 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