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.
... средств. К примеру, Adobe Photoshop сейчас не является чисто растровым редактором, a CorelDRAW имеет довольно развитые средства работы с растровой графикой. 2. Графические редакторы, используемые для создания векторных и растровых изображений Редакторы растровой графики Microsoft Paint - простой (или лучше сказать - простейший) редактор, входящий в стандартную поставку операционных систем ...
... поле зрения оптической системы. Положим, что D (рис.3) - действительная диафрагма, которая ограничивает пучок световых лучей, участвующих в формировании изображения, - апертурная диафрагма, DxuD2 - изображения этой диафрагмы в передней и задней частях оптической системы. Если Dy или D2 заменить реальными диафрагмами, то они будут ограничивать световой поток так же, как диафрагма D. На основании ...
... стало очень динамичным, разномасштабным, многоракурсным и цветовым, вследствие чего значительно возросла информационная насыщенность зрительного ряда. Глава 3. Соотношение слова и изображения в аудиовизуальном сообщении 1. Комплексное аудиолингвовизуальное сообщение Изображение как знаковая система первична по отношению к символическим знакам, в том числе и к написанному слову1. Первоначально ...
... после «Четырех апостолов» тоже не создал ничего значительного. Он скончался через два года после завершения этой работы — в 1528 году. Творчество Дюрера не имело непосредственных продолжателей, но его влияние на искусство Германии было огромным, решающим. Художники одного с ним поколения, так же как и его младшие современники, уже совсем иными глазами смотрели на мир, нежели мастера 15 в. Острый ...
0 комментариев