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
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);
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
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;
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;
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.
OUTPUT
* Kurva C :
* Kurva Dragon :
Top Related