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) – вывод треугольников ландшафта в режиме сплошной закраски. Параметры процедуры:

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

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

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

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

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

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

o        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:

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

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

 


Информация о работе «Построение изображений ландшафта в реальном времени»
Раздел: Информатика, программирование
Количество знаков с пробелами: 67267
Количество таблиц: 5
Количество изображений: 27

Похожие работы

Скачать
24360
0
0

... средств. К примеру, Adobe Photoshop сейчас не является чисто растровым редактором, a CorelDRAW имеет довольно развитые средства работы с растровой графикой. 2. Графические редакторы, используемые для создания векторных и растровых изображений Редакторы растровой графики Microsoft Paint - простой (или лучше сказать - простейший) редактор, входящий в стандартную поставку операционных систем ...

Скачать
24268
0
3

... поле зрения оптической системы. Положим, что D (рис.3) - действительная диафрагма, которая ограничивает пучок световых лучей, участвующих в формировании изображения, - апертурная диафрагма, DxuD2 - изображения этой диафрагмы в передней и задней частях оптической системы. Если Dy или D2 заменить реальными диафрагмами, то они будут ограничивать световой поток так же, как диафрагма D. На основании ...

Скачать
99490
3
0

... стало очень динамичным, разномасштабным, многоракурсным и цветовым, вследствие чего значительно возросла информационная насыщенность зрительного ряда. Глава 3. Соотношение слова и изображения в аудиовизуальном сообщении 1. Комплексное аудиолингвовизуальное сообщение Изображение как знаковая система первична по отношению к символическим знакам, в том числе и к написанному слову1. Первоначально ...

Скачать
96923
0
0

... после «Четырех апостолов» тоже не создал ничего значительного. Он скончался через два года после завершения этой работы — в 1528 году. Творчество Дюрера не имело непосредственных продолжателей, но его влияние на искусство Германии было огромным, решающим. Художники одного с ним поколения, так же как и его младшие современники, уже совсем иными глазами смотрели на мир, нежели мастера 15 в. Острый ...

0 комментариев


Наверх