TUGAS GRAFIKA KOMPUTER

9
TUGAS GRAFIKA KOMPUTER KURVA C, DRAGON, DAN SIEPERNZKI Oleh : Dinar Rani P. (0710960023) Khori Widayanti (0710963019) Ade Yuanita Anggraini (0710963049) PROGRAM STUDI ILMU KOMPUTER

Transcript of TUGAS GRAFIKA KOMPUTER

Page 1: TUGAS GRAFIKA KOMPUTER

TUGAS GRAFIKA KOMPUTER

KURVA C, DRAGON, DAN SIEPERNZKI

Oleh :

Dinar Rani P. (0710960023)

Khori Widayanti (0710963019)

Ade Yuanita Anggraini (0710963049)

PROGRAM STUDI ILMU KOMPUTER

JURUSAN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMI PENGETAHUAN

ALAM

UNIVERSITAS BRAWIJAYA

2009

Page 2: TUGAS GRAFIKA KOMPUTER

Source Code

No. Unit11234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OpenGL, StdCtrls, ExtCtrls, Buttons,UKurva, Menus;

type TForm1 = class(TForm) PanelDraw: TPanel; Button1: TButton; Button2: TButton; BitBtn1: TBitBtn; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject);

private GLContext: HGLRC; glDC: HDC; errorCode: GLenum; procedure ExceptionGL (Sender: TObject; E:Exception); end;

var Form1: TForm1; h_Wnd : HWND; h_DC : HDC; h_RC : HGLRC;

implementationusesPalets, FComplex, Complex;

var Parameter : TParCmpFrt; Palet : TPalet;

{$R *.dfm}

function PrepareOpenGL (aHandle: THandle; var GLContext: HGLRC; var glDC: HDC) : boolean;

var pfd: TPixelFormatDescriptor; FormatIndex: integer;begin Result := false; FillChar (pfd, SizeOf(pfd), 0); with pfd do begin nSize := SizeOf(TPIXELFORMATDESCRIPTOR);

Page 3: TUGAS GRAFIKA KOMPUTER

57585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115

nVersion := 1; dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL; iPixelType := PFD_TYPE_RGBA; cRedBits := 0; cRedShift := 0; cGreenBits := 0; cGreenShift := 0; cBlueBits := 0; cBlueShift := 0; cAlphaBits := 0; cAlphaShift := 0; cAccumBits := 0; cAccumRedBits := 0; cAccumGreenBits := 0; cAccumBlueBits := 0; cAccumAlphaBits := 0; cDepthBits := 16; cStencilBits := 0; cAuxBuffers := 0; iLayerType := PFD_MAIN_PLANE; bReserved := 0; dwLayerMask := 0; dwVisibleMask := 0; dwDamageMask := 0; end;

glDC := getDC (aHandle); FormatIndex := ChoosePixelFormat (glDC, @pfd); if FormatIndex=0 then raise Exception.Create ('ChoosePixelFormat failed '+IntToStr (GetLastError));

if not SetPixelFormat (glDC, FormatIndex, @pfd) then raise Exception.Create ('SetPixelFormat failed '+IntToStr (GetLastError));

GLContext := wglCreateContext (glDC); if GLContext=0 then raise Exception.Create ('wglCreateContext failed '+IntToStr (GetLastError));

if not wglMakeCurrent (glDC, GLContext) then raise Exception.Create ('wglMakeCurrent failed '+IntToStr (GetLastError)); Result := true;end;

procedure TForm1.FormDestroy(Sender: TObject);begin wglMakeCurrent (Canvas.Handle, 0); wglDeleteContext (GLContext);end;

procedure TForm1.ExceptionGL (Sender: TObject; E:Exception);begin ShowException (Sender, E); repeat

Page 4: TUGAS GRAFIKA KOMPUTER

116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174

errorCode := glGetError; if errorCode<>GL_NO_ERROR then ShowMessage (gluErrorString(errorCode)); until errorCode=GL_NO_ERROR;end;

procedure TForm1.FormCreate(Sender: TObject);begin randomize; Application.OnException := ExceptionGL; PrepareOpenGL (PanelDraw.handle, GLContext, glDC);

if (Height = 0) then Height := 1; glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, PanelDraw.Width/PanelDraw.Height, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glViewport(0, 0, PanelDraw.Width, PanelDraw.Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (PanelDraw.Width <= PanelDraw.Height) then glOrtho (-1.0, 1.0, -1.0*PanelDraw.Height/PanelDraw.Width, 1.0*PanelDraw.Height/PanelDraw.Width, -1.0, 1.0) else glOrtho (-1.0*PanelDraw.Width/PanelDraw.Height, 1.0*PanelDraw.Width/PanelDraw.Height, -1.0, 1.0, -1.0, 1.0); glShadeModel(GL_SMOOTH); Palet := TPalet.Create (64); Parameter.C := TComplex.Create (0,0);end;

procedure Sierp(k:integer;h:integer;SN:SierpN;SA:SierpM);

begin if k > 0 then begin Sierp(k - 1,SN.a1[h],SN,SA); T.A:=SA[H,1]; // avanti; Sierp(k - 1,SN.a2[h],SN,SA); T.A:=SA[h,2]; T.P:=T.P/2; //avanti; T.P:=T.P*2; Sierp(k - 1,SN.a3[h],SN,SA); T.A :=SA[h,3]; //avanti; Sierp(k - 1,SN.a4[h],SN,SA); end;end;

Page 5: TUGAS GRAFIKA KOMPUTER

175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233

{procedura di assegnazione}procedure SierpinskiBis(h:integer);var SN:SierpN; SA:SierpM;

begin

{ordine di di orientamento}

SA[1,1]:=135; SA[1,2]:=90; SA[1,3]:=45;

SA[2,1]:=225; SA[2,2]:=180; SA[2,3]:=135;

SA[3,1]:=315; SA[3,2]:=270; SA[3,3]:=225;

SA[4,1]:=45; SA[4,2]:=0; SA[4,3]:=315;

{ordine di ripetizione}

SN.a1[1]:=1; SN.a2[1]:=2; SN.a3[1]:=4; SN.a4[1]:=1;

SN.a1[2]:=2; SN.a2[2]:=3; SN.a3[2]:=1; SN.a4[2]:=2;

SN.a1[3]:=3; SN.a2[3]:=4; SN.a3[3]:=2; SN.a4[3]:=3;

SN.a1[4]:=4; SN.a2[4]:=1; SN.a3[4]:=3; SN.a4[4]:=4;

{chiamata della ricorsione} Sierp(h,4,SN,SA); T.A:=(45); // avanti; Sierp(h,1,SN,SA); T.A:=135; // avanti; Sierp(h,2,SN,SA); T.A:= 225; //avanti;

Page 6: TUGAS GRAFIKA KOMPUTER

234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267

Sierp(h,3,SN,SA); T.A:= 315; //avanti;

end;

procedure TForm1.Button1Click(Sender: TObject);beginClearScreen; cp.x:= 0.2; cp.y:= 0.0; DrawC(90,0.8,20);end;

procedure TForm1.Button2Click(Sender: TObject);beginClearScreen; glColor3f(0,0,0); InitCp.x:=-0.5; Initcp.y:= 0.0; cp:=InitCP; jum :=1; t1[1]:=cp; t2 :=t1; Dragon(0,0.8,12);end;

procedure TForm1.Button3Click(Sender: TObject);

begin T.X:=150; T.Y:=50; T.P:=25;end;

end.

Page 7: TUGAS GRAFIKA KOMPUTER

OUTPUT

* Kurva C :

* Kurva Dragon :