• крок(х4, у4, х3, у3, num)—продовжуємо стовбур;
• крок(х4, у4, х6, у6, num+l)—права гілка;
• крок(х4, у4, х7, у7, num+l) —ліва гілка.
Значення пит показує ступінь деталізації обрахування дерева. Один цикл ітерацій містить багато кроків, що відповідає одному значенню величини num. Числове значення пит можна використовувати для припинення ітеративного процесу, а також для визначення поточного кольору елементів "рослини".
Завершення циклів ітерацій у нашому алгоритмі відбувається тоді, коли довжина гілки стає менше від деякої величини lmin , наприклад, lmin = 1.
Цей фрактал при
= 2°, = 86°, к = 0.14, к1 = 0.3 схожий на папороть (рис. 3.40).Метод IFS використовується не тільки для створення зображень. Його використали Барнслі та Слоан для ефективного ущільнення графічних зображень при записі до файла. Основна ідея така: оскільки фрактали можуть репрезентувати дуже складні зображення за допомогою простих ітерацій, то опис цих ітерацій потребує значно меншого обсягу інформації, ніж відповідні растрові зображення. Дkя кодування зображень необхідно вирішувати обернену задачу — для зображення (або його фрагмента) підібрати відповідні коефіцієнти афінного перетворення. Цей метод використовується для запису кольорових фотографій у файли з ущільненням у десятки і сотні разів без помітного погіршення зображення. Формат таких графічних файлів було названо FIF (Fractal Image Format) і запатентовано фірмою Iterated Systems [40].
3. Засобами бібліотеки Opengl активізувати джерело світла на формі. Забезпечити операцію масштабування використовуючи клавіші “+” та “-“
object frmGL: TfrmGL
Left = 163
Top = 167
Width = 385
Height = 272
Caption = #1055#1079#1089'-504 '#1070#1088#1095#1091#1082' '#1057'.'#1051'.'
Color = clBlack
Font.Charset = RUSSIAN_CHARSET
Font.Color = clMaroon
Font.Height = -16
Font.Name = 'Times New Roman'
Font.Style = [fsBold, fsItalic]
OldCreateOrder = True
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
OnKeyDown = FormKeyDown
OnPaint = FormPaint
OnResize = FormResize
PixelsPerInch = 96
TextHeight = 19
end
procedure TfrmGL.FormPaint(Sender: TObject);
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glPushMatrix;
glRotatef(Angle, 0.0, 1.0, 0.0); // поворот на угол
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @MaterialColor);
OutText ('ЮРЧУК С.Л.');
glPopMatrix;
SwapBuffers(DC);
end;
procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
begin
With frmGL do begin
Angle := Angle + 0.2;
If (Angle >= 720.0) then Angle := 0.0;
MaterialColor [0] := (720.0 - Angle) / 720.0;
MaterialColor [1] := Angle / 720.0;
MaterialColor [2] := Angle / 720.0;
InvalidateRect(Handle, nil, False);
end;
end;
procedure TfrmGL.FormCreate(Sender: TObject);
begin
Angle := 0;
DC := GetDC(Handle);
SetDCPixelFormat;
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
wglUseFontOutlines(Canvas.Handle, 0, 255, GLF_START_LIST, 0.0, 0.15,
WGL_FONT_POLYGONS, nil);
Init;
uTimerID := timeSetEvent (1, 0, @FNTimeCallBack, 0, TIME_PERIODIC);
end;
procedure TfrmGL.FormResize(Sender: TObject);
begin
glViewport(0, 0, ClientWidth, ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(40.0, ClientWidth / ClientHeight, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0.0, 0.0, -8.0);
glRotatef(30.0, 1.0, 0.0, 0.0);
InvalidateRect(Handle, nil, False);
end;
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
timeKillEvent(uTimerID);
glDeleteLists (GLF_START_LIST, 256);
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC(Handle, DC);
DeleteDC (DC);
end;
procedure TfrmGL.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close
end;
procedure TfrmGL.SetDCPixelFormat;
var
nPixelFormat: Integer;
pfd: TPixelFormatDescriptor;
begin
FillChar(pfd, SizeOf(pfd), 0);
with pfd do begin
nSize := sizeof(pfd);
nVersion := 1;
dwFlags := PFD_DRAW_TO_WINDOW or
PFD_SUPPORT_OPENGL or
PFD_DOUBLEBUFFER;
iPixelType:= PFD_TYPE_RGBA;
cColorBits:= 24;
cDepthBits:= 32;
iLayerType:= PFD_MAIN_PLANE;
end;
nPixelFormat := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, nPixelFormat, @pfd);
end;
end.
Список використаної літератури
1. С.В.Глушаков, Г.А.Крабе Компютерная графика, Харьков 2002
2. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004.
3. OpenGl, технология ставшая символов, Учебник в примерах.
4. Конспект лекцій.
5. Мережа Інтернет.