Курсовая работа: Построение изображений ландшафта в реальном времени
· Color – базовый цвет треугольника.
Поля N и pD в совокупности образуют уравнение плоскости, несущей треугольник.
Размер записи – 92 байта (реальный размер, без выравнивания – 91 байт).
Необходимо привести описания типов, использованных в записи TTriangle:
TPoint3 = record
X, Y, Z : Single;
end; - запись служит для хранения координат точки.
Размер записи – 12 байт.
Для работы с равномерной сеткой высот предусмотрены следующие процедуры и функции:
· function CreateZBitMap(Width, Height : Integer) : TZBitMap – выделение памяти для первичной сетки высот, ее размеры - Width и Height, совпадают с размерами области вывода;
· procedure FreeZBitMap(var ZBMP : TZBitMap) – освобождение памяти, занимаемой первичной сеткой высот;
· function FillZBitMap(Image : TImage; Colors : THeightColors) : TZBitMap - заполнение первичной сетки высот на основе изображения, хранимого в Image и соответствий «Цвет-высота», содержащихся в массиве Colors;
· function DivideZBitMapIntoTriangles(BitMap : TZBitMap; StepX, StepY : Integer) : TTriangles – функция преобразования первичной равномерной сетки BitMap в более разреженную сетку с шагами StepX и StepY по горизонтали и вертикали соответственно. После этого преобразования полученная сетка разбивается на треугольники, на основе которых будет построен ландшафт;
· procedure SmoothMap(var BitMap : TZBitMap) – процедура для проведения одного цикла сглаживания первичной сетки высот;
Для работы с треугольниками ландшафта предназначены следующие процедуры:
· procedure FillTrianglesNormals(var Triangles : TTriangles) – расчет и заполнение всех полей записи TTriangle, кроме координат точек и цвета;
В процедуре FillTrianglesNormals используются следующие вспомогательные функции:
· function GetNormal(T : TTriangle) : TPoint3 – процедура для вычисления координат вектора нормали к плоскости треугольника;
· function CorrectNormal(N : TPoint3) : TPoint3 – процедура нормализации вектора нормали;
· procedure AddNormal(var N : TPoint3; NAdd : TPoint3; var Count : Integer), procedure DivideNormal(var N : TPoint3; Count : Integer) – эти процедуры в совокупности служат для вычисления усредненной нормали в вершине треугольника;
2.2.2.3 Тип и структура файла для хранения карт изообластей
Файл для хранения информации о разметке карты изообластей высот является текстовым. Он имеет расширение HCL и разбит на секции, разделенные строками–маркерами. Ниже приведена его структура:
· заголовок файла – строка 'Landscape heights map';
· заголовок секции высот – строка ‘[ColorHeights Start]’;
o последовательность записей типа THeightColor;
· окончание секции высот – строка '[ColorHeights End]';
· заголовок секции пикселей – строка '[Pixels Start]';
o ширина и высота карты в пикселях;
o информация о пикселях карты, сжатая с помощью метода группового кодирования (последовательность пар «Индекс цвета – Длина участка»);