TRANSFORMASI GRAFIK 3 DIMENSI BAB IV TRANSFORMASI GRAFIK 3 DIMENSI Program S1 Teknik Informatika Sekolah Tinggi Teknologi Nurul Jadid Oleh : Moh. Furqan, S. Kom.
4.1 Grafik 3 Dimensi Grafik 3D media 2 dimensi dengan membentuk sumbu semu z. Teori perspektif sumbu semu z negatif garis tegak lurus kedepan pandangan (foreshortening) digambar miring dengan 2 mode : Mode Cavalier ; sudut miring 45° terhadap sumbu x dan tidak ada pemendekan garis yang menghadap ke depan pandangan pembaca. Mode Cabinet ; sudut miring 30° terhadap sumbu x dan panjang garis yang menghadap ke depan pembaca digambar setengah dari ukuran aslinya. Y Y Kubus Cavalier Kubus Cabinet X (0,0,0) (0,0,0) X Z Z Komputer Grafik
4.1 Grafik 3 Dimensi Untuk menggambarkan obyek 3D kedalam media 2D transfer koordinat dengan aturan : Koordinat X : (X3D) = X0 + X – Z Koordinat Y : (Y3D) = Y0 – Y + Z div 2 Jadi yang digambar dalam media 2D adalah koordinat (X3D, Y3D) seperti penggambaran grafik 2 dimensi perlu menentukan koordinat titik tengah monitor (X0,Y0) secara otomatis FormCreate : procedure TForm1.FormCreate(Sender: TObject); begin X0 := ClientWidth div 2; Y0 := ClientHeight div 2; With StringGrid1 do Begin Cells[0,0]:=‘X’; Cells[0,1]:=‘Y’; Cells[0,2]:=‘Z’; end; Komputer Grafik
4.1 Grafik 3 Dimensi Untuk menggambarkan bangun 3 dimensi procedure tak standar untuk mengubah koordinat 3D menjadi 2D dan menggambar titik 3 dimensi pada media 2 dimensi : procedure UbahKoordinat3D(var X3D,Y3D : integer; X,Y,Z : integer); begin X3D := X0 + X – Z; Y3D := Y0 - X + Z div 2; end; Sehingga menggambarkan sebuah titik 3D pada media 2D : Canvas.Pixels[X3D, Y3D] := clColor; jika X = 0, Y = 0, Z = 0 maka tergambar : Y 30° X (0,0,0) Z Komputer Grafik
4.1 Grafik 3 Dimensi Sumbu koordinat 3D dibuat dengan menetapkan sumbu X dan Y (2D), sedang sumbu Z ditentukan sebagai garis diagonal kiri bawah. Sistem sumbu 3D secara otomatis dengan Procedure FormPaint : procedure TForm1.FormPaint(Sender: TObject); var k : Integer; begin for k := 1 to X0 do X3D := X0 + k; Y3D := Y0; Canvas.Pixels[X3D,Y3D]:= clBlue; end; for k := 1 to Y0 do X3D := X0; Y3D := Y0-k; Canvas.Pixels[X3D,Y3D]:= clRed; for k := 1 to X0 do begin X3D := X0 - k; Y3D := Y0+k div 2; Canvas.Pixels[X3D,Y3D]:= clGreen; end; Komputer Grafik
4.1 Grafik 3 Dimensi Menggambar garis / bangun ruang yang bersegi : Procedure tak standar UbahKoordinat3D yang mengubah koordinat X,Y dan Z dalam 3 dimensi menjadi koordinat X3D dan Y3D dalam 2 dimensi Procedure standar membuat garis : Canvas.MoveTo(X0 + X3D1, Y0 – Y3D1); Canvas.LineTo(X0 + X3D2, Y0 – Y3D2); untuk membuat sebuah garis 3D dari titik (x1,y1,z1) ke titik (x2,y2,z2) : procedure TForm1.Garis3D(Sender: TObject; x1,y1,z1,x2,y2,z2 : integer); begin UbahKoordinat3D(X3D1, Y3D1, x1,y1,z1); UbahKoordinat3D(X3D2, Y3D2, x2,y2,z2); end; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Transformasi 3D dikelompokkan dalam 2 kategori : Transformasi Dasar Transformasi Lanjut Dalam transformasi 3D dilakukan penyeragaman ordo (ukuran) matrik, yaitu untuk obyek bangun ruang (4 x N), untuk operasi (4 x 4) dan untuk obyek titik (4 x 1) : Matrik titik : Matrik Trans : Matrik Obyek : X Y Z 1 T11 T21 T13 T14 T21 T22 T23 T24 T31 T22 T33 T34 T41 T42 T43 T44 X1 X2 X3 X4 … Xn Y1 Y2 Y3 Y4 … Yn Z1 Z2 Z3 Z4 … Zn 1 1 1 1 … 1 Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi 4.2.1 Konsep Obyek 3 Dimensi Konsep Obyek 3 dimensi dibatasi pada bangun ruang yang bersegi. Type obyek 3 dimensi adalah : Matrik4N = array[1..4.1..N] of integer; variabel obyek dan N didefinisikan sebagai variabel global, data obyek diisikan dalam sel-sel komponen StringGrid. Data dipanggil dengan procedure tak standar : procedure TForm1.MatrikObyek3D(Sender: TObject; var Obyek3D : Matrik4N); var i, j : integer; begin N := StrtoInt(eBanyakSegi.Text); for i := 1 to 3 do for j := 1 to N do Obyek3D[i,j] := StrToInt(StringGrid1.Cells[j, i-1]); for j := 1 to N do Obyek3D[4,j] := 1; end; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Menggambar obyek mentransfer koordinat obyek 3D menjadi koordinat obyek 2D dan procedure standar gambar garis 2D: procedure TForm1.UbahKoordinatObyek3D(var Obyek2D : Matrik3N; Obyek3D : Matrik4N); var i : integer; begin for i := 1 to N do Obyek2D[1,i] := X0 + Obyek3D[1,i] – Obyek3D[3,i]; Obyek2D[2,i] := Y0 - Obyek3D[2,i] + Obyek3D[3,i] div 2; end; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi procedure TForm1.GambarObyek3D(Sender : TObject; Obyek3D : Matrik4N); var i : integer; begin UbahKoordinatObyek3D(Obyek2D, Obyek3D); for i := 1 to N-1 do Canvas.MoveTo(trunc(Obyek2D[1,i], trunc(Obyek2D[2,i],)); Canvas.LineTo(trunc(Obyek2D[1,i+1], trunc(Obyek2D[2,i+1],)); end; Canvas.MoveTo(trunc(Obyek2D[1,N], trunc(Obyek2D[2,N],)); Canvas.LineTo(trunc(Obyek2D[1,1], trunc(Obyek2D[2,1],)); Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi 4.2.2 Perkalian Dua Matrik Dalam 3 Dimensi Ada 2 jenis perkalian matrik : Perkalian matrik 4 x 4 dengan matrik 4 x 4 (operator transformasi, bagi transformasi lanjut) Perkalian matrik 4 x 4 dengan matrik x N (operator dengan obyek, bagi transformasi dasar/lanjut) procedure perkalian matrik antar operator : procedure MatrikKaliTransformasi3D(var Tr1 : Matrik44; Tr2 : Matrik44); var i, j,k : integer; Hasil : matrik44; begin for i := 1 to 4 do for k := 1 to 4 do begin Hasil [i,k]:=0; for j := 1 to 4 do Hasil[i,k] := Hasil[i,k] + Tr1[i,j] * Tr2[j.k]; end; Tr1 := Hasil; end; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi procedure MatrikKaliTransformasiObyek3D(var Obyek : Matrik4N; Tr : Matrik44); var i, j,k : integer; Hasil : matrik4N; begin for i := 1 to 4 do for k := 1 to N do begin Hasil [i,k] := 0; for j := 1 to 4 do Hasil[i,k] := Hasil[i,k] + Tr[i,j] * Obyek[j.k]; end; Obyek := Hasil; end; Type matrik44 = array[1..4,1..4] of real ditulis sebagai type global. Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi 4.2.3 Transformasi Geometri Dasar 3 Dimensi Translasi 3D (Tv3) : Perpindahan obyek dengan vektor arah v = ai + bj + ck a = sumbu x, b = sumbu y, c = sumbu z sifat : x’ = x + a, y’ = y + b dan z’ = z + c persamaan matrik : P’ = Tv3 o P 4 x 1 4 x 4 4 x 1 matrik translasi : Tv3 = 1 0 0 a 0 1 0 b 0 0 1 c 0 0 0 1 Y X (0,0,0) Z v = ai + bj + ck P (x,y,z) P’ (x’,y’,z’) Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Procedure matrik translasi : procedure MatrikTranslasi3D(var Tv3 : Matrik44; a,b,c: real); begin Tv3[1,1] := 1 ; Tv3[1,2] := 0 ; Tv3[1,3] := 0 ; Tv3[1,4] := a ; Tv3[2,1] := 0 ; Tv3[2,2] := 1 ; Tv3[2,3] := 0 ; Tv3[2,4] := b ; Tv3[3,1] := 0 ; Tv3[3,2] := 0 ; Tv3[3,3] := 1 ; Tv3[3,4] := c ; Tv3[4,1] := 0 ; Tv3[4,2] := 0 ; Tv3[4,3] := 0 ; Tv3[4,4] := 1 ; end; Sedangkan procedure translasi : procedure TForm1.btTranslasiObyek3DClick(Sender : TObject; var Obyek3D : Matrik4N; a,b,c: real); Begin a:=StrToFloat(eA.Text); b:= StrToFloat(eB.Text); c := StrToFloat(eC.Text); MatrikObyek3D(Sender,Obyek3D); MatrikTranslasi3D (Tv3,a,b,c); MatrikKaliTransformasiObyek3D(Obyek3D,Tv3); GambarObyek3D(Sender,Obyek3D); End; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Rotasi Terhadap Sumbu Z (Rz,α) : memutar obyek pada bidang XY dengan titik putar (0,0,0) dengan menganggap koordinat z tetap. sudut putar satuan radian. rotasi 2D pada bidang XY: x’ = x cos α – y sin α y’ = x sin α + y cos α z’ = z matrik rotasi: Rz, α = cos α -sin α 0 0 sin α cos α 0 0 0 0 1 0 0 0 0 1 Y X (0,0,0) Z α P (x,y,z) P’ (x’,y’,z’) Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Procedure matrik rotasi: procedure MatrikRotasiSumbuZ(var R3 : Matrik44; sudut: real); Var radian : real; Begin radian := sudut / 180 * 3.14; R[1,1] := cos(radian); R[1,2] := -sin(radian); R[1,3] := 0 ; R[1,4] := 0; R[2,1] := sin(radian); R[2,2] := cos(radian); R[2,3] := 0 ; R[2,4] := 0; R[3,1] := 0 ; R[3,2] := 0 ; R[3,3] := 1 ; R[3,4] := 0; R[4,1] := 0 ; R[4,2] := 0 ; R[4,3] := 0 ; R[4,4] := 1; end; Sedangkan procedure rotasi : procedure TForm1.btRotasiSumbuZObyek3DClick(Sender : TObject; var Obyek3D : Matrik4N; sudut: real); sudut:=StrToFloat(eSudut.Text); MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuZ (R3,sudut); MatrikKaliTransformasiObyek3D(Obyek3D,R3); GambarObyek3D(Sender,Obyek3D); End; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Rotasi Terhadap Sumbu Y (Ry,α) : memutar obyek pada bidang ZX dengan titik putar (0,0,0) dengan menganggap koordinat y tetap. sudut putar satuan radian. rotasi 2D pada bidang ZX : z’ = z cos α – x sin α y’ = y x’ = z sin α + x cos α matrik rotasi: Ry, α = cos α 0 sin α 0 0 1 0 0 -sin α 0 cos α 0 0 0 0 1 Y X (0,0,0) Z α P (x,y,z) P’ (x’,y’,z’) Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Procedure matrik rotasi: procedure MatrikRotasiSumbuY(var R3 : Matrik44; sudut: real); Var radian : real; Begin radian := sudut / 180 * 3.14; R[1,1] := cos(radian); R[1,2] := 0; R[1,3] := sin(radian); R[1,4] := 0; R[2,1] := 0; R[2,2] := 1; R[2,3] := 0; R[2,4] := 0; R[3,1] := -sin(radian); R[3,2] := 0; R[3,3] := cos(radian); R[3,4] := 0; R[4,1] := 0; R[4,2] := 0; R[4,3] := 0; R[4,4] := 1; end; Sedangkan procedure rotasi : procedure TForm1.btRotasiSumbuYObyek3DClick(Sender : TObject; var Obyek3D : Matrik4N; sudut: real); sudut:=StrToFloat(eSudut.Text); MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuY (R3,sudut); MatrikKaliTransformasiObyek3D(Obyek3D,R3); GambarObyek3D(Sender,Obyek3D); End; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Rotasi Terhadap Sumbu X (Rx,α) : memutar obyek pada bidang ZY dengan titik putar (0,0,0) dengan menganggap koordinat x tetap. sudut putar satuan radian. rotasi 2D pada bidang YZ : x’ = x y’ = y cos α – z sin α z’ = y sin α + z cos α matrik rotasi: Rx, α = 1 0 0 0 0 cos α - sin α 0 0 sin α cos α 0 0 0 0 1 Y X (0,0,0) Z α P (x,y,z) P’ (x’,y’,z’) Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Procedure matrik rotasi: procedure MatrikRotasiSumbuX(var R3 : Matrik44; sudut: real); Var radian : real; Begin radian := sudut / 180 * 3.14; R[1,1] := 1; R[1,2] := 0; R[1,3] := 0; R[1,4] := 0; R[2,1] := 0; R[2,2] := cos(radian);R[2,3] := -sin(radian); R[2,4] := 0; R[3,1] := 0; R[3,2] := sin(radian);R[3,3] := cos(radian); R[3,4] := 0; R[4,1] := 0; R[4,2] := 0; R[4,3] := 0; R[4,4] := 1; end; Sedangkan procedure rotasi: procedure TForm1.btRotasiSumbuXObyek3DClick(Sender : TObject; var Obyek3D : Matrik4N; sudut: real); sudut:=StrToFloat(eSudut.Text); MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuX(R3,sudut); MatrikKaliTransformasiObyek3D(Obyek3D,R3); GambarObyek3D(Sender,Obyek3D); End; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Scaling Terhadap Titik (0,0) So,sx,sy,sz : mengubah ukuran obyek. sx = sumbu x, sy = sumbu y, sz = sumbu z. sifat scaling : x’ = sx.x y’ = sy.y z’ = sz.z matrik scaling: So,sx,sy,sz = sx 0 0 0 0 sy 0 0 0 0 sz 0 0 0 0 1 Y X (0,0,0) Z P (x,y,z) P’ (x’,y’,z’) So,sx,sy,sz Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Procedure matrik scaling: procedure MatrikScaling3D(var S3 : Matrik44; sx,sy,sz: real); Begin S[1,1] := sx; S[1,2] := 0; S[1,3] := 0; S[1,4] := 0; S[2,1] := 0; S[2,2] := sy; S[2,3] := 0; S[2,4] := 0; S[3,1] := 0; S[3,2] := 0; S[3,3] := sz; S[3,4] := 0; S[4,1] := 0; S[4,2] := 0; S[4,3] := 0; S[4,4] := 1; end; Sedangkan procedure scaling: procedure TForm1.btScalingObyek3DClick(Sender : TObject; var Obyek3D : Matrik4N; sx,sy,sz: real); sx:=StrToFloat(eX.Text); sy:=StrToFloat(eY.Text); sz:=StrToFloat(eZ.Text); MatrikObyek3D(Sender,Obyek3D); MatrikScaling3D(S3,sx,sy,sz); MatrikKaliTransformasiObyek3D(Obyek3D,S3); GambarObyek3D(Sender,Obyek3D); End; Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi 4.2.4 Transformasi 3 Dimensi Lanjut Transformasi 3D lanjut merupakan gabungan beberapa beberapa transformasi 3D dasar. Tilting (Ti) : Rotasi terhadap sumbu X diikuti dengan rotasi terhadap sumbu Y. Ti = Ry,αy . Rx,αx procedure Tilting (var Ti : Matrik44; Rx,Ry: Matrik44; SudutX, sudutY : real); Begin Sudut:=StrToFloat(eSudut.Text); MatrikRotasiSumbuX(Ry,SudutY); MatrikRotasiSumbuX(Rx,SudutX); MatrikKaliTransformasi3D(Ry,Rx); Ti := Ry; End; procedure RotasiTiltingObyek3D (var Obyek : Matrik4N; R: Matrik44); Var Rx, Ry, sudutX, sudutY : real; MatrikObyek3D(Obyek,N); Tilting(Ti, Rx, Ry, SudutX, sudutY); MatrikKaliTransformasiObyek3D(Obyek,Ti); GambarObyek3D(Sender,Obyek3D); Komputer Grafik
4.2 Transformasi Geometri 3 Dimensi Align Vektor V : Rotasi terhadap sumbu X diikuti dengan rotasi terhadap sumbu Y. Ti = Ry,αy . Rx,αx Komputer Grafik