Реферат по предмету "Информатика, программирование"


Построение трехмерной модели вазы

Курсоваяработа
по дисциплине«Компьютерная геометрия играфика»
на тему: Построениетрехмерной модели вазы

Содержание
1. Постановказадачи
2. Описаниеиспользуемых алгоритмов
2.1 Построениеперспективной проекции
2.2 Алгоритм удаленияневидимых линий и поверхностей
2.3 Алгоритм получения изменений формы и движения объекта
3. Описаниепрограммы
3.1 Обобщеннаяструктурная диаграмма программы
3.2 Введенные типыданных и их предназначение
3.3 Введенныеосновные переменные и их предназначение
3.4 Текстовоеописание основных процедур и функций и их блок-схемы
3.5 Алгоритмвзаимодействия процедур
4. ТестированиепрограммыСписоклитературыПриложение
проекция алгоритм диаграмма переменная

1. Постановка задачи
Целью данной работыявляется построение трехмерной модели вазы. Моделируемая сцена представляетсобой поверхность, образованную полигонами. Координатная модель представляетсобой набор координат нескольких окружностей различных радиусов, центромлежащими на вертикальной оси вазы и координаты центра дна вазы.
Для каркасногоизображения вазы можно рисовать сетку параллелей и меридианов. Для этого удобно воспользоватьсяизвестными формулами параметрического описания. Координаты точек поверхности вазыопределяются как функции от двух переменных (параметров) — высоты (h) и долготы (l).
х = R sin l
у = R cos l  (1)
z = H h,
где R — радиус соответствующей параллели, l — долгота (от -180° до +180° или от 0° до 360°),h — высота (изменяется от -0,5 до +0,5), Н—высота вазы.
Параллель – это линия,состоящая из точек из точек с постоянной широтой. Меридиан — это линия, представляющаяточки с постоянной долготой. В каркасной модели вазы меридианы — этокриволинейная линия.
Ваза в данной работесостоит из 30 меридианов и 10 параллелей. Сначала вычисляются мировые координатывершин стенок вазы. В данной модели их 300. После этого рассчитываются номеравершин полигонов для стенок вазы. Аналогичным образом вычисляются мировыекоординаты вершины дна вазы и номера полигонов дна вазы.
Далее производится видовоепреобразование координат точек плоскостей, то есть выполняется преобразованиемировых координат (x, y, z) в экранные координаты (X,Y) с добавлениемперспективной проекции.
Для удаления невидимыхлиний используется Z буфер, в которомсортируются полигоны по удалению от плоскости экрана. Рассчитывается средняякоордината Z для каждого полигона и всоответствии с её значением полигоны выводятся на экран, начиная с самыхудалённых и заканчивая ближайшими. Тем самым и обеспечивается перекрытиеближними полигонами дальних и отсечение невидимых частей модели.
Для расчёта освещённостиполигона рассчитывается координаты вектора нормали к нему и, исходя изнаправления вектора нормали, задаётся цвет заливки для полигона.

2. Описание используемых алгоритмов
2.1 Построениеперспективной проекции
Точки в двухмерном итрехмерном пространствах представляются координатами (X, Y) и (х, у, z) соответственно. Принеобходимости получения перспективной проекции задается большое количествоточек P(x, у, z), принадлежащих объекту, для которых предстоит вычислитькоординаты точек изображения Р'(Х, Y) на картинке. Для этого нужно толькопреобразовать координаты точки Р из мировых координат (х, у, z) в экранныекоординаты (X, Y) ее центральной проекции Р'. Предположим, что экран расположенмежду объектом и глазом Е. Для каждой точки Р объекта прямая линия РЕпересекает экран в точке Р'.
Это отображение удобновыполнять в два этапа. Первый этап — видовое преобразованием — точка Р остаетсяна своем месте, но система мировых координат переходит в систему видовыхкоординат. Второй этап — перспективное преобразование. Это точноепреобразование точки Р в точку Р' объединенное с переходом из системытрехмерных видовых координат в систему двухмерных экранных координат:
/>
Для выполнения видовыхпреобразований должны быть заданы точка наблюдения, совпадающая с глазом, иобъект. Будет удобно, если начало ее координат располагается где-то вблизицентра объекта, поскольку объект наблюдается в направлении от Е к О. Пустьточка наблюдения Е будет задана в сферических координатах f, q, r по отношениюк мировым координатам. То есть мировые координаты (точки Е) могут бытьвычислены по формулам:
xe= r sin fcos q)
ye=r sin f sin q(2)
ze= r cos f
Обозначения сферическихкоординат схематически изображены на рисунке 2.
/>
Рисунок 1 — Сферические координаты точки наблюдения Е
/>/>Видовое преобразование может быть записано в форме
[хe ye ze 1]=[хw уw zw 1]V, (3)
где V — матрица видовогопреобразования размерами 4х4.
Матрица V, полученная в процессе видовогопреобразования, выглядит следующим образом:

/> (4)
Сейчас можно использоватьвидовые координаты хe и уe просто игнорируя координату ze для получения ортогональнойпроекции. Каждая точка Р объекта проецируется в точку Р' проведением прямойлинии из точки Р перпендикулярно плоскости, определяемой осями х и у. Этупроекцию можно также считать перспективной картинкой, которая была бы полученапри удалении точки наблюдения в бесконечность. Параллельные линии остаютсяпараллельными и на картинке, полученной при ортогональном проецировании.
Теперь для построенияперспективной проекции рассмотрим непосредственно перспективное преобразование.
На рисунке 2 выбранаточка Q, видовые координаты которой равны(0, 0, d) для некоторого положительного числаd. Плоскость z = d определяет экран,который будет использоваться следующим образом. Экран — это плоскость,проходящая через точку Q и перпендикулярная оси z. Экранные координатыопределяются привязкой начала к точке Q, а оси Х и Y имеют такие же направления, как оси х и у соответственно.Для каждой точки объекта Р точка изображения Р' определяется как точкапересечения прямой линии РЕ и экрана. Чтобы упростить рисунок, будем считать,что точка Р имеет нулевую у-координату. Но все последующие уравнения длявычисления ее у-координаты также пригодны и для любых других значенийкоординаты X. На рисунке треугольники EPR и EP'Q подобны. Следовательно,
/> (5)

Отсюда будем иметь
/> (6)
X = dx/Z
/>
Рисунок 2 — Экран и видовые координаты
Аналогично можем получить:
Y = dy/Z. (7)
Ранее было введенопредположение, что точка О начала системы мировых координат примерно совпадаетс центром объекта. Поскольку ось z видовой системы координат совпадает с прямойлинией ЕО, которая пересекает экран в точке Q, то начало Q системы экранных координат будет находиться вцентре изображения. Если бы мы потребовали, чтобы это начало координатрасполагалось в нижнем левом углу экрана, а размеры экрана составляли 2с1 погоризонтали и 2с2 по вертикали, то нужно дополнить формулы вычисления X и Y:
Х = d x/z + с1
Y = d y/z + c2 (8)

2.2 Алгоритм удаленияневидимых линий и поверхностей
Для изображенияповерхности вазы с удалением невидимых точек в аксонометрической проекции можновоспользоваться таким свойством: видимыми являются точки с неотрицательнымзначением координаты Z всистеме видовых координат. При этом центр видовых координат (X,Y,Z) совпадает сцентром сферы, плоскость X0Y является плоскостью проецирования, аось Z направлена на камеру (наблюдателя).
Сортировка граней поглубине
При вращении объектанаблюдается интересный артефакт – грани рисуются в одном и том же порядке,поэтому в какой-то момент времени объект отображается в необычном ракурсе. Дляустранения этого эффекта применяется сортировка граней по глубине, такназываемый «алгоритм художника».
Если для каждой гранивычислить координаты средней точки, то в общем случае, чем меньше координата z этой точки, тем больше вероятностьчто эта грань не будет перекрыта другой при отображении на экране (предполагая,что наблюдатель находится где-то на отрицательной полуоси z). Вариантов сортировки может бытьнесколько – можно сортировать грани в массиве polygons, можно сортировать указатели награни в дополнительном массиве.
«Алгоритмхудожника» отличается чрезмерной простотой реализации, и, как следствие,недостаточно эффективен. В самом деле, если 3D сцена состоит из большого количества объектов, в среднемполовина полигонов будет не видна в текущем кадре. А значит, их отображение наэкране и не требуется. Недостаток «алгоритма художника» состоит втом, что отображаются все полигоны. Для сокращения числа треугольников можновычислить для каждой грани вектор нормали, что позволит отбросить грани,повернутые от нас.
Определение нормали кповерхности
Нормаль к поверхностипредставляет ее локальную кривизну, а следовательно, и направление зеркальногоотражения. Если известно аналитическое описание поверхности, то нормальвычисляется непосредственно. Но для многих поверхностей бывает задана лишь ихполигональная аппроксимация. Зная уравнение каждой грани, можно найтинаправление внешней нормали.
Во многих алгоритмахудаления невидимых линий и поверхностей используются только ребра или вершины,поэтому, для того чтобы объединить их с моделью освещения, необходимо знатьприближенное значение нормали на ребрах и в вершинах. Пусть заданы уравненияплоскостей полигональных граней, тогда нормаль к их общей вершине равнасреднему значению нормалей ко всем многоугольникам, сходящимся в этой вершине.
Если уравнения плоскостейне заданы, то нормаль к вершине можно определить, усредняя векторныепроизведения всех ребер, пересекающихся в вершине.
Следует обратить вниманиена то, что необходимы только внешние нормали. Кроме того, если полученныйвектор не нормируется, то его величина зависит от количества и площадиконкретных многоугольников, а также от количества и длины конкретных ребер.Сильнее проявляется влияние многоугольников с большей площадью и более длинныхребер.
Когда нормаль кповерхности используется для определения интенсивности и для изображенияобъекта или сцены выполняется перспективное преобразование, то нормаль следуетвычислять до перспективного деления. В противном случае направление нормалибудет искажено, а это приведет к тому, что интенсивность, задаваемая модельюосвещения, будет определена неправильно.
В данной работе для каждой грани при инициализацииобъекта находиться вектор нормали. Далее этот вектор приводится к единичной длине, так как дляопределения косинуса угла между векторами проще использовать единичные векторы.Для этого нужно определить длину вектора и разделить на нее каждую координату.
Его координатысохраняются в структуре соответствующей грани. Кроме того, при каждом поворотесцены векторы нормали нужно пересчитывать.
Координаты векторанормали в общем виде:
nx = A.y ×(B.z — C.z) + B.y ×(C.z — A.z) + C.y ×(A.z — B.z)
ny = A.z ×(B.x — C.x) + B.z ×(C.x — A.x) + C.z ×(A.x — B.x)  (9)
nz = A.x ×(B.y — C.y) + B.x ×(C.y — A.y) + C.x ×(A.y — B.y)
Отсюда невидимость граниопределяется следующим образом:
По углу междунаправлением взгляда и нормалью можно определить повернута грань к нам или отнас. Если направление взгляда совпадает с вектором (0, 0, 1), то косинус угламежду векторами равен nz (координата z нормали), и если nz 2.3Алгоритм получения изменений формы и движения объекта
Вращение объекта в разныестороны, в том числе и вокруг своей оси осуществляется с помощью изменения координатточки наблюдения (ρ, θ, ψ)
Для повышения скоростисоздания изображения часто используется следующая технология – объектпомещается в память, а затем копируется в нужное место экрана. Этот процессможно разбить на следующие этапы:
1) закрашиваниекартинкой фона первой поверхности в памяти
2) отрисовкаизображения в памяти поверх фона
3) копированиеизображения из памяти на экран
4) вычисление новыхкоординат объектов
5) снова п. 1
3. Описание программы3.1 Обобщенная структурная диаграмма программы
/>
Рисунок 3 — Обобщеннаяструктурная диаграмма программы
Программа условноразделена на блоки, каждый из которых выполняют свои собственные функции. Вначале программы идут название модуля и модули, использующие данный модуль.Далее в объявлении типов, постоянных, переменных описываются два новых типазаписи, постоянные, а также процедуры и переменные, которые применяются вданной программе.
Процедура начальнойустановки инициализирует переменные требуемыми значениями, устанавливаетколичество полигонов, начальное положение, заполняет массив точек исходнымизначениями.
Процедура преобразованияотвечает за перевод мировых координат в видовые, а потом из видовых в экранные.
Процедура рисованиявызывает последовательно блок преобразования координат и процедуру составленияполигонов из точек. Затем выполняет рисование полигонов в промежуточном буфереи совмещение результата с буфером отображения.
Процедура составленияполигонов выполняет преобразования координат в экранные, составление полигоновиз массива точек и сортировку полученных полигонов в Z буфере с учётом их расположения по глубине сцены.
Блок вращения меняетзначения углов обзора в соответствии с нажатиями на клавиши позиционирования ивызывает процедуру отрисовки.
3.2Введенные типы данных и их предназначение
При реализации программыбыли определены некоторые специализированные типы данных (таблица 1).
Таблица 1 — Типы данных.Тип Значение Предназначение T3DPoint record Содержит 3 координаты точки в трехмерном пространстве, координаты точки на экране, номер точки и нормаль к этой точке имеющая три координаты. TPolygon record Содержит указатели на вершины полигона, то есть содержит переменные типа P3DPoint. нормаль к полигону, номер полигона, цвет и среднюю точку.
3.3Введенные основные переменные и их предназначение
При реализации программыбыли определены некоторые переменные (таблица 2).

Таблица 1 — ПеременныеПеременная Значение Предназначение w,v1 array [1… nPoint] of T3DPoint мировые, видовые координаты вершин v array [1… nPoint] of TPoint экранные координаты точек polygons array [1… nTPolygon] of TPolygon массив объектов фигуры teta extended Отвечает за угол поворота относительно оси Y. Имеет фиксированное значение teta:=pi/9. phi extended Отвечает за угол поворота относительно оси X. Имеет фиксированное значение phi:=pi*4/3. buf TBitmap Вспомогательная поверхность в ней создается движение сферы blink_buf TBitmap Вспомогательная поверхность для быстрого закрашивания фоном (хранит в себе фон изображения) A, B, C, D переменные типа word типа TPolygon (record) Определяют номера вершин четырехугольника в полигоне. Диапазон значений — 0… nTPolygon ro real Определяет расстояние от объекта наблюдения до фигуры. Имеет фиксированное значение
3.4Текстовое описание основных процедур и функций и их блок-схемы
Процедура FormCreate
Задаются углы поворота, радиусыпаралеллей, их количество и высота вазы. Вычисляются видовые координаты вершин вазы(пересечения параллелей и меридианов). Рассчитывается количество полигонов. Создаётсяфон типа TBitmap, на котором будет рисоваться фигура(рисунок 4).

/>
Процедура FormKeyDown
В этой процедуре отслеживаются нажатые клавиши споследующим выполнений соответствующих команд.
При помощи процедуры KeyDown задается угол поворота объекта. Принажатии клавиш Up, Down, Left, Rightобъект поворачивается в заданном направлении (рисунок 5).
/>
Рисунок 5 – Блок-схема процедурыFormKeyDown

Процедура Sort
Для каждого полигонавысчитывается вектор нормали и приводится к единичной форме; сортировка массиваполигонов по минимальным значениям средних координат (рисунок6).
/>
Рисунок 6 – Блок-схема процедурыSort
Процедура ViewTransformation
В этой процедуревычисляются видовые и экранные координаты точек, задаются полигоны. В процедуремировые координаты переводятся в видовые, в свою очередь которыепреобразовываются в экранные координаты точек (рисунок7).
/>
Рисунок 7 – Блок-схемапроцедуры ViewTransformation
Процедура Draw
Поочередная прорисовка полигонов,то есть который грань дальше от нас прорисовывается первой и т.д (рисунок 8).

/>
Рисунок 8 – Блок-схемапроцедуры Draw
Функция tone
Функция, задающаяплоскость цвета.
В зависимости от угламежду направлением взгляда и нормалью цвет должен изменяться. Значениекоординаты nz нормали для видимой грани изменяетсяв диапазоне [-1, 0), цвет грани задан в виде RGB компонентов. И, следовательно, для получения цветаграни нужно умножить каждую компоненту на абсолютное значение nz. Для получения компонент цвета воспользовалисьфункциями GetRValue, GetGValue, GetBValue.
3.5 Алгоритмвзаимодействия процедур
/>
Рисунок 9 – Алгоритмвзаимодействия процедур

4. Тестирование программы
Интерфейс программыпредставляет собой форму, на которой представлена ваза. Форма имеет фон, длялучшего восприятия.
После запуска программына экране не наблюдается ничего. Для наблюдения эффектов предлагаетсяиспользовать следующие кнопки клавиатуры: ВНИЗ: Поворот вокруг оси x вниз; ВЛЕВО: Поворот вокруг оси y влево; ВВЕРХ: Поворот вокруг оси x вверх; ВПРАВО: Поворот вокруг оси y вправо.
Вид окна программыпредставлен на рисунке 10.
При нажатии на клавиши «влево»,«вправо», «вверх», «вниз» происходит соответствующееперемещение фигуры.
/>
Рисунок 10 — Вид окнапрограммы
В ходе тестированияпрограмма работала стабильно, не вызывала появления сообщений об ошибках.

Списоклитературы
1. Порев В.Н.Компьютерная графика – СПб.: БХВ – Петербург, 2002. – 432 с.: ил.
2. Шикин А.В.,Боресков А.В. Компьютерная графика. Полигональные модели. – М.: ДИАЛОГ – МИФИ,2001. – 464с.
3. Л. АммералПринципы программирования в машинной графике. Пер. с англ. – М.: «СолСистем», 1992. – 224 с.: ил.

Приложение
Листинг программы
unit prog;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls,Math;
type
TForm1 =class(TForm)
procedureKeyDown(Sender:TObject;var Key:Word;Shift:TShiftState);
procedureFormCreate(Sender:TObject);
procedureFormPaint(Sender:TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
T3DPoint=record
x,y,z:extended
end;
TPolygon=record
A,B,C,D:word;
clr:TColor;
end;
const
step=30;//количество точек на однойпараллели
nPOINT=step*10+1;
nPOLYGON=step*10+step;
col1=255+255*$100+204*$10000; //цветстенок(полигонов) вазы
col2=209+154*$100+65*$10000; //цвет днавазы
var
Form1:TForm1;
Buf,Blinc_Buf:TBitMap;
polygons:array[1..nPolygon]of Tpolygon;
w,v1:array[1..nPOINT]of T3DPoint;//мировые (world), видовые (view) координаты вершин
v:array[1..nPOINT]of TPoint;//экранные (screen) координаты вершин
S:array[1..nPOLYGON]of extended;
n:array[1..nPOLYGON]of T3DPoint; //массив нормалей
teta,phi,d,ro,r:real;
implementation
{$R *.dfm}
functiontone(clr:TColor;nz:extended):TColor; //плоскость цвета
begin
tone:=rgb(round(nz*GetRValue(clr)),
round(nz*GetGValue(clr)),
round(nz*GetBValue(clr)))
end;
procedureViewTransformation;
var i:integer;
begin
for i:=1 tonPOINT Do
begin
v1[i].x:=Round(w[i].x*(-sin(teta))+w[i].y*(cos(teta)));
v1[i].y:=Round(w[i].x*(-cos(phi)*cos(teta))-w[i].y*(cos(phi)*sin(teta))+
w[i].z*(sin(phi)));
v1[i].z:=Round(w[i].x*(-sin(phi)*cos(teta))-w[i].y*(sin(phi)*sin(teta))-
w[i].z*(cos(phi)))+ro;
v[i].x:=Round(Form1.ClientWidthdiv 2+v1[i].x );
v[i].y:=Round(Form1.ClientHeightdiv 2+v1[i].y);
end;
end;
procedureSort;
var
i:integer;
begin
for i:=1 tonPOLYGON do
begin
s[i]:=(v1[polygons[i].a].z+v1[polygons[i].b].z+v1[polygons[i].c].z)/3;
//координатывектора нормали
n[i].x:=v1[polygons[i].a].y*(v1[polygons[i].b].z-v1[polygons[i].c].z)+
v1[polygons[i].b].y*(v1[polygons[i].c].z-v1[polygons[i].a].z)+
v1[polygons[i].c].y*(v1[polygons[i].a].z-v1[polygons[i].b].z);
n[i].y:=v1[polygons[i].a].z*(v1[polygons[i].b].x-v1[polygons[i].c].x)+
v1[polygons[i].b].z*(v1[polygons[i].c].x-v1[polygons[i].a].x)+
v1[polygons[i].c].z*(v1[polygons[i].a].x-v1[polygons[i].b].x);
n[i].z:=v1[polygons[i].a].x*(v1[polygons[i].b].y-v1[polygons[i].c].y)+
v1[polygons[i].b].x*(v1[polygons[i].c].y-v1[polygons[i].a].y)+
v1[polygons[i].c].x*(v1[polygons[i].a].y-v1[polygons[i].b].y);
if(sqrt(sqr(n[i].x)+sqr(n[i].y)+sqr(n[i].z)))0 then
n[i].z:=n[i].z/(sqrt(sqr(n[i].x)+sqr(n[i].y)+sqr(n[i].z)))
elsen[i].z:=0;
end;
end;
procedureDraw;
var
j,i1,i:integer;
f: real;
begin
Sort;
f:=0;
buf.Canvas.Draw(0,0,blinc_buf);//рисуем в основном буферефон
for i1:=1 tonPOLYGON do
begin
//Опред.невидимости грани(слегка затеняем внутреннюю поверхность)
if(n[i1].z>0) then n[i1].z:=n[i1].z*0.60;
end;
for i1:=1 tonPOLYGON do
begin
for i := 1 tonPOLYGON do
if s[i]>fthen begin j:=i;f:=s[i];end;
withpolygons[j] do
begin
Buf.Canvas.Brush.Color:=tone(clr,ABS(n[j].z));//цвет полигона
Buf.Canvas.Pen.Color:=tone(clr,ABS(n[j].z*0.96));//цветграниц полигонов
Buf.Canvas.Polygon([v[A],v[B],v[C],v[D]]);//прорисовка полигона
end;
s[j]:=0;
f:=0;
end;
Form1.Canvas.Draw(0,0,buf);//прорисовываем буфер на экране(форме)
end;
procedureTForm1.KeyDown(Sender:TObject;var Key:Word;Shift:TShiftState);
begin
CASE KEY of
VK_UP: phi:=phi+pi*0.05;
VK_DOWN: phi:=phi-pi*0.05;
VK_LEFT: teta:=teta+pi*0.03;
VK_RIGHT:teta:=teta-pi*0.03;
end;
ViewTransformation;
Draw;
end;
procedureTForm1.FormCreate(Sender: TObject);
var
B,L,H,nn:integer;
dL:Real;
const
Rz:array[0..9]of integer = (50,75,90,94,88,74,54,42,40,46);//радиусы параллелей
begin
H:=250; // высота вазы
d:=200; //масштаб
ro:=500; //перспектива
teta:=pi/9; //угол поворота
phi:=pi*4/3; //угол поворота
// вершины вазы
for B:=0 to 9do
begin
for L:=0 tostep-1 do
begin
dL:=L*Pi*(360/step)/180;
w[B*step+L+1].x:=Rz[B]*sin(dL);//Вычисление мировых координат
w[B*step+L+1].y:=Rz[B]*cos(dL);
w[B*step+L+1].z:=H/10*B-H/2;
end;
end;
// полигонывазы
nn:=1;
for B:=1 to 9do
begin
for L:=0 tostep-2 do
begin
polygons[nn].A:=(B-1)*step+L+1;
polygons[nn].B:=(B-1)*step+L+2;
polygons[nn].C:=B*step+L+2;
polygons[nn].D:=B*step+L+1;
polygons[nn].clr:=col1;
nn:=nn+1;
end;
polygons[nn].A:=B*step;
polygons[nn].B:=(B-1)*step+1;
polygons[nn].C:=B*step+1;
polygons[nn].D:=(B+1)*step;
polygons[nn].clr:=col1;
nn:=nn+1;
end;
// вершина днавазы
w[nPOINT].x:=0;w[nPOINT].y:=0;w[nPOINT].z:=-H/2;
// полигоныдна вазы
for L:=0 tostep-2 do
begin
polygons[L+nPOINT].A:=L+2;
polygons[L+nPOINT].B:=L+1;
polygons[L+nPOINT].C:=nPOINT;
polygons[L+nPOINT].D:=nPOINT;
polygons[L+nPOINT].clr:=col2;
end;
polygons[nPOLYGON].A:=1;
polygons[nPOLYGON].B:=step;
polygons[nPOLYGON].C:=nPOINT;
polygons[nPOLYGON].D:=nPOINT;
polygons[nPOLYGON].clr:=col2;
// буфер
buf:=TBitmap.Create;
buf.Width:=Form1.ClientWidth;
buf.Height:=Form1.ClientHeight;
// фон
blinc_buf:=TBitmap.Create;
blinc_buf.Width:=Form1.ClientWidth;
blinc_buf.Height:=Form1.ClientHeight;
blinc_buf.Canvas.Rectangle(0,0,Form1.ClientWidth,Form1.ClientHeight);
blinc_buf.LoadFromFile('./background.bmp');
end;
procedureTForm1.FormPaint(Sender: TObject);
begin
//ViewTransformation;
// Draw;
end;
end.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.