Main – модуль, в котором происходит связывание всех компонентов программы. В не содержатся следующие функции:
// загрузка настроек, таких как путь к карте высот, карте освещенности и текстуре ландшафта и неба, из файла
void LoadSettings(char *FileName)
// В этом событии указываются действии, совершаемые в момент старта программы
bool appPreInit()
// В этом событии указывается последовательность действий при визуализации каждого кадра (несколько раз в секунду)
bool appRender()
// В этом событии указываются действия, совершаемые при закрытии программы (освобождение ресурсов)
void appShutdown()
// Обработчик нажатий клавиш
bool ProcessKey(HWND hWnd,WPARAM wParam)
Terrain – Описывает непосредственно геометрию ландшафта (вершины, индексы, нормали), текстуры ландшафта, неба, воды.
Также этот класс отвечает за визуализацию всех этих объектов.
DynamicCamera – Реализация камеры, ее передвижения, вращения, а также связь с ландшафтом (передвижение по нему).
Font – модуль для инициализации и вывода текста на экран
Render – модуль для реализации визуализации в 3-мерном и 2-мерном режимах
Image – модуль для загрузки и обработки изображений
Texture – модуль для загрузки изображений и инициализаций структур
Vector – модуль для работы с векторами (сложение, вычитание, скалярное произведение, векторное произведение)
Matrix – модуль для работы с матрицами (умножение, транспонирование, нахождение обратной). Матрицы используются для реализации композиции трансформаций (перемещение, вращение, поворот), для реализации геометрических алгоритмов
Base – модуль для включения основных стандартных библиотек
Win32 – модуль, связанный с включением библиотек среды Windows
Представление исходных данных
При проектировании программы важно сразу решить, как будут представлены исходные данные, то есть, в условиях данной работы – как будет описана карта высот и трехмерный ландшафт, какими будут форматы файлов для хранения информации о карте и ландшафте.
В данной работе был выбран полигональный способ аппроксимации пространственных фигур. Сущность полигональной модели состоит в том, что каждое тело представляется в виде определенного набора граней-многоугольников, с определенной точностью приближающих форму исходного тела. В качестве грани-многоугольника был выбран треугольник, так как это наиболее простой многоугольник, его точки всегда лежат в одной плоскости и любой более сложный многоугольник можно разбить на несколько треугольников. Но ускорения вычислений я не стал вводить тип треугольник в моей программе. Вместо этого есть массив вершин и массив индексов, которые и указывают на определенные треугольники (0, 1, 2 – первый треугольник; 1, 2, 3 – второй треугольник и т.д.)
Разработанные типы данных и форматы файлов подробно описаны в последующих разделах.