Магистр ДонНТУ Чумак Алексей Юриевич

Чумак Алексей Юрьевич

Факультет компьютерных наук и технологий
Кафедра компьютерной инженерии
Специальность: Системное программирование

Тема выпускной работы:

Разработка методики и алгоритмов статистического контроля и диагностики состояния электрических двигателей в распределенной АСУ ТП

Научный руководитель: Краснокутский В.А.

Моделирование и визуализация ландшафта с использованием DirectX

Предисловие

Долгое время я увлекался написанием всевозможных игр, но однажды для реализации своей задумки мне не хватило знаний, а моим средствам разработки мощностей. Поэтому правев уйму времени в интернете, я с ужасом выяснил, что множество людей столкнулись с похожими проблемами и даже преуспели в их решении, но все их наработки были настолько разрозненны, что использовать их вместе не представлялось возможным. Поэтому, не долго думая я взял на себя задачу по систематизации найденной информации, и именно этому посвятил свой индивидуальный раздел.

Введение

Трехмерные ландшафты стали неотъемлемой частью современных игр. Долгое время использование настоящих "объёмных" ландшафтов не представлялось возможным из-за маленького быстродействия процессоров и слабо развитой графической системемы. С развитием техники появилась возможность и потребность увеличить не только красочность игр, но и их реалистичность. Паралельно использование 3D ландшафтов затребовали системы моделирования и навигации. Однако все эти отрасли наткнулись на ряд технических вопросов, искались способы оптимального хранения карты ландшафта и способы её обработки.

Способы представления ландшафта

Существует 3 основных способа представления ландшафта [2]
  • Использование регулярной сетки высот (или еще другое название Карта Высот - HeightMap).
  • Использование иррегулярной сетки вершин и связей, их соединяющих (т.е. хранение простой триангулизированной карты).
  • Хранение карты ландшафта, но в данном случае хранятся не конкретные высоты, а информация об использованном блоке. В этом случае создается некоторое количество заранее построенных сегментов, а на карте указываются только индексы этих сегментов.

Использование карты высот

    Карта высот (heighmap) — это массив, в котором каждый элемент задает высоту отдельной вершины сетки ландшафта. Обычно мы представляем карту высот в виде матрицы, каждый элемент которой однозначно соответствует вершине сетки ландшафта.

    Когда мы сохраняем карту высот на диске, для каждого ее элемента обычно отводится один байт, так что значения высоты могут находиться в диапазоне от 0 до 255. Хотя диапазон от 0 до 255 достаточен для хранения перепадов высот нашего ландшафта, в приложении может потребоваться масштабирование этого значения, чтобы оно соответствовало масштабу нашего трехмерного мира. Предположим, что в качестве единиц измерения для нашего трехмерного мира мы выбрали сантиметры, тогда диапазона значений от 0 до 255 будет недостаточно, чтобы изобразить что-нибудь интересное. Поэтому при загрузке данных в приложение мы выделяем для каждого элемента карты высот переменную типа int или float. Это позволяет масштабировать значения за пределы диапазона от 0 до 255, чтобы они соответствовали любому требуемому масштабу.[1]

Например, вот карта высот и получившийся ландшафт (построенно в собственной системе "Devil Sheep"):


Посегментная карта высот

    В данном способе также используются карты высот. Только вместо высот в ней хранятся индексы ландшафтных сегментов. Как эти сегменты представлены, в принципе, роли не играет. Они могут быть и регулярными, и иррегулярными (причем можно использовать и те и другие одновременно).Это дает нам возможность хранить огромные открытые пространства и дополнительную информацию об отдельных блоках. Но при этом одним из недостатков является проблема стыковки блоков и модификации ландшафта в целом.[2]

Иррегулярная сетка

    Еще один способ представления данных для ландшафтов - иррегулярная сетка вершин и связей их соединяющих. Зачастую такие решения применяются в специализированных пакетах для игр или специальных пакетах для работы с трехмерной графикой (типа 3Dmax, Maya ). И хранятся в виде трехмерных моделей [2]. Здесь используется значительно меньше информации для построения ландшафта. Нам необходимо хранить только значения высот каждой вершины и связи эти вершины соединяющие. Это дает нам выигрыш в скорости при передаче огромных массивов информации по AGP, в процессе визуализации ландшафта. Однако алгоритмы работы с таким ландшафтом ,зачастую, намного сложнее аналогичных с картами высот.

Список используемой литературы