Transcript BAB IV

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
1.
2.
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 pembacaY digambar
Y
setengah dari ukuran aslinya.
Kubus Cavalier
Kubus Cabinet
X
(0,0,0)
(0,0,0)
X
Z
Z
Komputer Grafik
2
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;
end;
Komputer Grafik
3
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 :
Y
Canvas.Pixels[X3D, Y3D] := clColor;
jika X = 0, Y = 0, Z = 0 maka tergambar :
30°
X
(0,0,0)
Z
Komputer Grafik
4
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
begin
X3D := X0 + k; Y3D := Y0;
Canvas.Pixels[X3D,Y3D]:= clBlue;
end;
for k := 1 to Y0 do
for k := 1 to X0 do
begin
begin
X3D := X0; Y3D := Y0-k;
X3D := X0 - k; Y3D := Y0+k div 2;
Canvas.Pixels[X3D,Y3D]:= clRed;Canvas.Pixels[X3D,Y3D]:= clGreen
end;
end;
end;
Komputer Grafik
5
4.1 Grafik 3 Dimensi
1.
2.
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);
Canvas.MoveTo(X0 + X3D1, Y0 – Y3D1);
Canvas.LineTo(X0 + X3D2, Y0 – Y3D2);
end;
Komputer Grafik
6
4.2 Transformasi Geometri 3 Dimensi
1.
2.
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 Obyek :
X
Y
Z
1
Matrik Trans :
X1
Y1
Z1
1
Komputer Grafik
X2
Y2
Z2
1
T11
T21
T31
T41
X3
Y3
Z3
1
T21
T22
T22
T42
X4
Y4
Z4
1
T13
T23
T33
T43
…
…
…
…
T14
T24
T34
T44
Xn
Yn
Zn
1
7
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
8
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
begin
Obyek2D[1,i] := X0 + Obyek3D[1,i] – Obyek3D[3,i];
Obyek2D[2,i] := Y0 - Obyek3D[2,i] + Obyek3D[3,i] div 2;
end;
end;
Komputer Grafik
9
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
begin
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],));
end;
Komputer Grafik
10
4.2 Transformasi Geometri 3 Dimensi
4.2.2 Perkalian Dua Matrik Dalam 3 Dimensi
Ada 2 jenis perkalian matrik :
1. Perkalian matrik 4 x 4 dengan matrik 4 x 4 (operator transformasi,
bagi transformasi lanjut)
2. 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
11
4.2 Transformasi Geometri 3 Dimensi
procedure MatrikKaliTransformasiObyek3D(var
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;
Obyek
:
Type matrik44 = array[1..4,1..4] of real ditulis sebagai type global.
Komputer Grafik
12
4.2 Transformasi Geometri 3 Dimensi
4.2.3 Transformasi Geometri Dasar 3 Dimensi
1. Translasi 3D (Tv3) :
Perpindahan obyek dengan vektor arah v = ai + bj + ck
Y
a = sumbu x, b = sumbu y, c = sumbu z
v = ai + bj + ck
P’ (x’,y’,z’)
P (x,y,z)
X
(0,0,0)
Z
sifat : x’ = x + a, y’ = y + b dan z’ = z + c
persamaan matrik : P’ = Tv3 o P
4x1
4x4
4x1
matrik translasi :
Tv3 = 1 0 0 a
0 1 0 b
0 0 1 c
0 0 0 1
Komputer Grafik
13
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);
Komputer Grafik
14
4.2 Transformasi Geometri 3 Dimensi
2.
Rotasi Terhadap Sumbu Z (Rz,α) :
memutar obyek pada bidang XY dengan titik putar (0,0,0) dengan
menganggap koordinat z tetap.
Y
sudut putar  satuan radian.
P’ (x’,y’,z’)
P (x,y,z)
α
(0,0,0)
X
Z
rotasi 2D pada bidang XY:
x’ = x cos α – y sin α
y’ = x sin α + y cos α
matrik rotasi:
Rz, α = cos α -sin α 0 0
sin α
cos α 0 0
0
0
1 0
0
0
0 1
Komputer Grafik
z’ = z
15
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);
Begin
sudut:=StrToFloat(eSudut.Text);
MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuZ (R3,sudut);
MatrikKaliTransformasiObyek3D(Obyek3D,R3);
GambarObyek3D(Sender,Obyek3D);
End;
Komputer Grafik
16
4.2 Transformasi Geometri 3 Dimensi
3.
Rotasi Terhadap Sumbu Y (Ry,α) :
memutar obyek pada bidang ZX dengan titik putar (0,0,0) dengan
Y
menganggap koordinat y tetap.
sudut putar  satuan radian.
X
(0,0,0)
Z
rotasi 2D pada bidang ZX :
z’ = z cos α – x sin α
y’ = y
x’ = z sin α + x cos α
matrik rotasi:
Ry, α = cos α 0
0
1
-sin α 0
0
0
Komputer Grafik
α
P’ (x’,y’,z’)
P (x,y,z)
sin α
0
cos α
0
0
0
0
1
17
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);
Begin
sudut:=StrToFloat(eSudut.Text);
MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuY (R3,sudut);
MatrikKaliTransformasiObyek3D(Obyek3D,R3);
GambarObyek3D(Sender,Obyek3D);
End;
Komputer Grafik
18
4.2 Transformasi Geometri 3 Dimensi
4.
Rotasi Terhadap Sumbu X (Rx,α) :
memutar obyek pada bidang ZY dengan titik putar (0,0,0) dengan
Y
menganggap koordinat x tetap.
sudut putar  satuan radian.
P (x,y,z)
α
P’ (x’,y’,z’)
Z
rotasi 2D pada bidang YZ :
x’ = x
y’ = y cos α – z sin α
z’ = y sin α + z cos α
matrik rotasi:
Rx, α = 1
0
0
0
cos α - sin α
0
sin α
cos α
0
0
0
Komputer Grafik
X
(0,0,0)
0
0
0
1
19
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);
Begin
sudut:=StrToFloat(eSudut.Text);
MatrikObyek3D(Sender,Obyek3D); MatrikRotasiSumbuX(R3,sudut);
MatrikKaliTransformasiObyek3D(Obyek3D,R3);
GambarObyek3D(Sender,Obyek3D);
End;
Komputer Grafik
20
4.2 Transformasi Geometri 3 Dimensi
5.
Scaling Terhadap Titik (0,0) So,sx,sy,sz :
mengubah ukuran obyek. sx = sumbu x, sy = sumbu y, sz = sumbu z.
Y
P’ (x’,y’,z’)
So,sx,sy,sz
P (x,y,z)
X
(0,0,0)
sifat scaling :
x’ = sx.x
y’ = sy.y
matrik scaling:
So,sx,sy,sz =
Z
z’ = sz.z
sx
0
0
0
Komputer Grafik
0
sy
0
0
0
0
sz
0
0
0
0
1
21
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);
Begin
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
22
4.2 Transformasi Geometri 3 Dimensi
4.2.4 Transformasi 3 Dimensi Lanjut
Transformasi 3D lanjut merupakan gabungan beberapa beberapa
transformasi 3D dasar.
1. 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;
Begin
MatrikObyek3D(Obyek,N); Tilting(Ti, Rx, Ry, SudutX, sudutY);
MatrikKaliTransformasiObyek3D(Obyek,Ti);
GambarObyek3D(Sender,Obyek3D);
End;
Komputer Grafik
23
4.2 Transformasi Geometri 3 Dimensi
2.
Align Vektor V :
Rotasi terhadap sumbu X diikuti dengan rotasi terhadap sumbu Y.
Ti = Ry,αy . Rx,αx
Komputer Grafik
24