48124 (Построение изображений ландшафта в реальном времени), страница 4

2016-07-30СтудИзба

Описание файла

Документ из архива "Построение изображений ландшафта в реальном времени", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48124"

Текст 4 страницы из документа "48124"

Для работы c файлами карт изообластей высот предусмотрены следующие процедуры:

  • procedure LoadFromHeightsMap(FileName : string; var Image : TImage; var Colors : THeightColors) - процедура для загрузки из файла HCL карты изообластей высот и соответствий цвет-высота. Информация загружается из файла FileName. Разметка карты выводится на Image, а соответствия «Цвет-высота» помещаются в динамический массив Colors;

  • procedure SaveAsHeightsMap(Image : TImage; Colors : THeightColors; FileName : string) – процедура для сохранения разметки карты в файл HCL. Разметка считывается из Image, соответствия «Цвет-высота» из массива Colors, эта информация помещается в файл c именем FileName.

2.2.2.4 Распределение программы по модулям

Таблица 2.2.2.4.1. Распределение программы «Редактор карт» по модулям

Имя модуля

Описанные типы

Назначение модуля

AboutUnit.pas

-

Модуль формы «О программе»

ColorUnit.pas

-

Модуль формы определения соответствия «Цвет-высота»

HelpUnit.pas

-

Модуль формы «Помощь»

MainUnit.pas

-

Главный модуль программы

ME_ExtRegUnit.pas

-

Модуль регистрации расширения HCL

ME_FileUnit.pas

-

Модуль работы с файлами

ME_GraphicsUnit.pas

-

Модуль реализации процедур визуализации

ME_MathUnit.pas

TRGBColor, TPoint3, TTriangle, TTriangles, THeightColor, THeightColors, TZBitMap

Модуль реализации вычислений

MLEditorUnit.pas

-

Модуль инструментальной формы «Обработка карт»

NewPictureUnit.pas

-

Модуль формы определения размеров новой карты

SectionUnit.pas

-

Модуль формы «Разрез»


2.2.2.5 Связи между модулями программы


Рис. 2.2.2.5.1. Связи между модулями программы «Редактор карт»

2.2.3 Программа «Просмотр ландшафта»

В программе «Просмотр ландшафта» также используется тип TTriangle. Он полностью аналогичен типу TTriangle, используемому в программе «Редактор карт». Ландшафт, как уже говорилось, представляется как совокупность треугольников, поэтому для его хранения в программе предусмотрен тип, представляющий собой динамический массив:

TTriangles = array of TTriangle.


2.2.3.1 Процедуры манипуляции изображением ландшафта

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

  • function GetScale(Triangles : TTriangles; Width, Height : Integer) : Single;

Необходимо пояснить значения аргументов представленной функции:

Triangles – треугольники ландшафта;

Width, Height – размеры области вывода.

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

  • function MulTrianglesScale(Triangles : TTriangles; dX, dY : Integer; Scale : Real) : TTriangles;

Значения аргументов:

Triangles – исходные треугольники сцены;

dX, dY – экранные смещения по горизонтали и по вертикали;

Scale – коэффициент масштабирования.

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

  • function RotatePointX(P, Center : TPoint3; Alpha : Real) : TPoint3;

  • function RotatePointY(P, Center : TPoint3; Alpha : Real) : TPoint3;

  • function RotatePointZ(P, Center : TPoint3; Alpha : Real) : TPoint3;

  • function RotateTriangleX(T : TTriangle; Center : TPoint3; Alpha : Real) : TTriangle;

  • function RotateTriangleY(T : TTriangle; Center : TPoint3; Alpha : Real) : TTriangle;

  • function RotateTriangleZ(T : TTriangle; Center : TPoint3; Alpha : Real) : TTriangle;

  • function RotateTrianglesX(Triangles : TTriangles; Center : TPoint3; Alpha : Real) : TTriangles;

  • function RotateTrianglesY(Triangles : TTriangles; Center : TPoint3; Alpha : Real) : TTriangles;

  • function RotateTrianglesZ(Triangles : TTriangles; Center : TPoint3; Alpha : Real) : TTriangles;

Аргументы всех функций однотипны: первый – объект, который должен быть повернут, второй – центр поворота; третий – угол поворота.


2.2.3.2 Z-буфер

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

TBuffer = array of array of Single.

Для работы с Z-буфером используются следующие процедуры:

  • procedure CreateBuffer(out Buffer : TBuffer) – процедура для выделения памяти для Z-буфера;

  • procedure ClearBuffer(var Buffer : TBuffer) – очистка буфера – его заполнение минимальным значением глубины;

  • procedure FreeBuffer(var Buffer : TBuffer) – освобождение памяти, занимаемой буфером.

2.2.3.3 Буфер кадра

Кроме того, необходим и буфер кадра. Буфер кадра в данной работе представлен статическим массивом (это ограничение обусловлено использованием функции BitBlt, обеспечивающей быстрый вывод изображения):

sWidth = 500;

sHeight = 650;

TScreen = array [0..sWidth - 1, 0..sHeight - 1] of Integer.

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

  • procedure ClearScreenBuffer;

2.2.3.4 Процедуры визуализации ландшафта

Для визуализации треугольников ландшафта и ландшафта в целом предназначены следующие процедуры:

  • procedure FillTriangleNormal (T : TTriangle; var Buffer : TBuffer; dX, dY : Integer; Scale : Real; LightPos : TPoint3) – закрашивание треугольника T методом гранения. Используется Z-буфер Buffer, используются экранные смещения dX и dY, коэффициент масштабирования Scale, положение источника света задается точкой LightPos;

  • procedure FillTriangleGouraud(T : TTriangle; var Buffer : TBuffer; dX, dY : Integer; Scale : Real; LightPos : TPoint3) – процедура, реализующая метод закраски Гуро. Аргументы аналогичны аргументам предыдущей процедуры;

  • procedure FillTrianglePhong(T : TTriangle; var Buffer : TBuffer; dX, dY : Integer; Scale : Real; LightPos : TPoint3) – процедура, реализующая метод закраски Фонга. Аргументы аналогичны аргументам предыдущей процедуры;

  • procedure DrawLightSource(P : TPoint3; dX, dY : Integer; Scale : Real; Buffer : TBuffer) – процедура для вывода окружности (по алгоритму Брезенхема), обозначающей положение источника света. Положение источника цвета задается точкой P. Остальные параметры аналогичны параметрам предыдущих функций;

  • procedure DrawLine(S, E : TPoint; Color : TRGBColor) – процедура вывода линии по алгоритму ЦДА. Аргументы S и E – точки начала и конца отрезка, Color определяет цвет отрезка;

  • procedure DrawTriangle(T : TTriangle) – вывод каркаса треугольника в буфер кадра;

  • procedure DrawWireTriangles(Triangles : TTriangles; dX, dY : Integer; Scale : Real) – вывод треугольников ландшафта в каркасном режиме;

  • procedure DrawSolidTriangles(Triangles : TTriangles; var Buffer : TBuffer; dX, dY : Integer; Scale : Real; Light : TLightType; LightPos : TPoint3; ShowLightSource : boolean) – вывод треугольников ландшафта в режиме сплошной закраски. Параметры процедуры:

    • Triangles – треугольники ландшафта;

    • Buffer – Z-буфер, используемый при визуализации;

    • dX, dY – экранные смещения по горизонтали и вертикали;

    • Scale – коэффициент масштабирования;

    • Light – определяет метод закраски треугольников. TLightType - перечисляемый тип, он определяется следующим образом:
      TLightType = (Normal, Gouraud, Phong);

    • LightPos – точка, задающая положение источника света;

    • ShowLightSource – логическая переменная, определяющая, отображается ли источник света;

  • procedure DrawScene(Triangles : TTriangles; View : TViewType; Light : TLightType; LightPos : TPoint3; ShowLightSource : boolean; var Buffer : TBuffer; dX, dY : Integer; Scale : Real; DC : Integer; NHDC : HDC; HBMP : HBITMAP) – основная процедура, объединяющая в себе все методы м режимы вывода сцены.

Аргументы, которые не были описаны в процедуре DrawSolidTriangles:

  • View – переменная определяющая режим отображения треугольников - каркасный или сплошной. TViewType – перечисляемый тип, его описание - TViewType = (Wire, Solid);

  • DC, NHDC, HBMP – переменные, используемые при выводе изображения с помощью функции BitBlt.


2.2.3.2 Тип и структура файла для хранения ландшафта

Файлы, используемые для хранения информации о треугольниках ландшафта, имеют расширение LND и являются типизированными. Был выбран именно этот тип файлов, так как использование текстовых файлов значительно замедлило бы процесс загрузки ландшафтов, а для работы с нетипизированными файлами пришлось бы разрабатывать сложные процедуры ввода/вывода (на основе доступных процедур низкого уровня для работы с файлами), в то время как прирост производительности был бы незначительным.

В программе файлы ландшафтов описываются следующим образом: File of TTriangle;

Для работы с файлами ландшафта предусмотрена следующая функция:

function LoadTrianglesFromFile(FileName : string) : TTriangles;

Единственный ее аргумент - имя файла, из которого будет считываться информация о треугольниках ландшафта.


2.2.3.3 Распределение программы по модулям

Таблица 2.2.3.3.1. Распределение программы «Просмотр ландшафта» по модулям

Имя модуля

Описанные типы

Назначение модуля

AboutUnit.pas

-

Модуль формы «О программе»

HelpUnit.pas

-

Модуль формы «Помощь»

L_ExtRegUnit.pas

-

Модуль регистрации расширения LND

L_FileUnit.pas

-

Модуль работы с файлами

L_GraphicsUnit.pas

TBuffer, TScreen, TViewType, TLightType

Модуль реализации процедур визуализации

L_MathUnit.pas

TRGBColor, TPoint3, TTriangle, TTriangles

Модуль реализации вычислений

LandscapePositionUnit.pas

-

Модуль формы «Положение ландшафта»

LightParamsUnit.pas

-

Модуль формы «Параметры источника света»

MainUnit.pas

-

Главный модуль программы

StatisticsUnit.pas

-

Модуль формы «Статистика»

ViewParamsUnit.pas

-

Модуль формы «Визуальные параметры»


2.2.3.4 Связи между модулями программы


Рис. 2.2.3.4.1. Связи между модулями программы «Просмотр ландшафта»


3. Технологическая часть


3.1 Выбор языка программирования

При разработке программного комплекса использовался язык программирования высокого уровня Object Pascal в составе среды визуального программирования Borland Delphi 7.

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


3.2 Описание программного комплекса

В состав программного комплекса входят два приложения: «Редактор карт» и «Просмотр ландшафта».


3.2.1 Программа «Редактор карт»


3.2.1.1 Общие сведения

Программа “Редактор карт” служит для создания ландшафтов на основе плоских карт изообластей. Данные карты могут быть созданы с помощью средств редактирования, предоставляемых “Редактором карт” или загружены в редактор из BMP-файлов (требуемая глубина цвета - 24 бита).

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


3.2.1.2 Интерфейс программы

При запуске программы на экране появляется главная и инструментальная формы.

Рис. 3.2.1.2.1. Формы, отображаемые при запуске «Редактора карт»

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.

Отзывы студентов

Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4280
Авторов
на СтудИзбе
640
Средний доход
с одного платного файла
Обучение Подробнее