Jumat, 30 November 2012

KOMPUTER GRAFIK

Teknologi Komputer Grafik
• Ada 2 cabang ilmu teknologi komputer grafik :
􀂾 Computer Graphics : Merupakan cabang ilmu komputer
yang membahas algoritma atau aspek komputasi dalam
membuat objek tanpa memperhatikan aspek estetis
(Asumsi bahwa citra belum pernah ada)
􀂾 Image Processing : Merupakan cabang ilmu komputer
yang membahas algoritma Pengolahan/ Pemrosesan
Citra ke dalam bentuk lain (asumsi citra sudah ada)
• Komputer grafik tidak membahas software komersial seperti
adobe photoshop, corel draw, page maker, paint, autocad,
visio, Office Family, Flash dsb
• Teknologi komputer grafik juga tidak membahas tentang
grafik bisnis, seperti diagram pie, diagram garis dsb
GRAFIKA KOMPUTER
• Bahan
􀀹 data lokasi (x; y;z)
􀀹 hubungan antar lokasi
􀀹 atribut lokasi (warna, pola, sifat cahaya dsb)
• Proses
algoritma untuk mengartikan data
• Hasil/ Keluaran
tampilan (visualisasi) data lokasi
• Komputer Grafik mencakup area :
􀀹Film (special effects)
􀀹Industri :
- CAD (Computer Aided Design)
- Automated machining
􀀹Visualisasi :
- data ilmiah
- hasil medik (scanning,USG,X-Ray,MRI)
􀀹Permainan Komputer
􀀹Distribusi Online
• Tiga pokok utama dalam komputer :
􀂾 Modeling
- Bagaimana merepresentasikan (= memodelkan) objek 3
Dimensi ?
- Bagaimana membuat model dari objek objek tertentu ?
􀂾 Animation
- Bagaimana merepresentasikan gerakan sebuah objek
- Bagaimana memberikan kendali kepada pembuat
animasi (animator) dalam pembuatan animasi
􀂾 Rendering (Sumbangan)
- Bagaimana mensimulasikan formasi gambar
- Bagaimana mensimulasikan cahaya seperti pada dunia
nyata?
Modelling :
• Representasi objek / lingkungan
􀂾shape-geometri dari sebuah objek
􀂾appearance-emission, reflection, and transmission
of light
• Bagaimana kita dapat membuat modelmodel
tersebut ?
􀂾Deskripsi manual (misal : menuliskan rumus)
􀂾Manipulasi secara interaktif
􀂾Menggunakan prosedur / program
􀂾melakukan pemindahan (scanning) dari objek riil
Bahan Ajar <Sinar Sinurat> 10
Animasi :
• Bagaimana caranya kita menampilkan gerakan
objek : posisi, sudut dsb sebagai fungsi dari waktu
• Bagaimana caranya mengendalikan gerakan
􀂙 Membuat gerakan dengan tangan, mengisi keyframe
􀂙 Simulasi perilaku (membat program yang berfungsi
sebagai "otak" dari sebuah objek)
􀂙 Simulasi fisika
􀂙 Menangkap gerakan
Bahan Ajar <Sinar Sinurat> 11
Rendering :
• Bagaimana caranya kita meniru dunia nyata ?
􀀹 Cahaya yang datang difokuskan oleh lensa
􀀹 Energi cahaya mempengaruhi film
􀀹 Representasi gambar sebagai titik-titik / pixels (x,y)
􀀹 Membutuhkan representasi dari kamera
• Bagaimana caranya kita meniru perilaku
cahaya?
􀀹 Cahaya dianggap sebagai photon (partikel cahaya)
􀀹 Menangkap gerak lurus dari photon
􀀹 Membuat model interaksi antara cahaya dengan
permukaan benda

Proses :
Pixel Resolusi
Vektor dan Skalar
• Skalar
􀂾 Simbol : A
􀂾 Kuantitas yang hanya memiliki besaran saja.
􀂾 Memenuhi aljabar biasa
• Vektor
􀂾 Simbol : A atau
􀂾 Kuantitas yang memiliki besaran dan arah
􀂾 Memenuhi aljabar vektor
• Deskripsi vektor: geometri (grafis); analitik :
􀂾 Panjang panah : besarnya vektor
􀂾 Arah panah : Arah vektor
Penjumlahan Vektor (Polygon)
Pengurangan Vektor
Komponen Sebuah Vektor
Vektor A dengan komponen
vektor Ax dan Ay yang
saling tegaklurus.
Komponen skalarnya :
Ax=A cos Φ, Ay=A sin Φ
Penjumlahan Vektor Berdasarkan Komponennya
Vektor Satuan
Vektor dapat dituliskan dalam vektor-vektor satuan. Sebuah
vektor satuan mempunyai magnitudo/ ukuran yang
besarnya sama dengan satu (1). Vektor satuan dalam
sistem koordinat kartesis dinyatakan dengan i, j dan k
yang saling tegaklurus.
Teknik Menggambar 3D
y
x
z
0
p
θ β
r
Perkalian Vektor
Dot product
Cross product (perkalian silang)
Catatan : dapat juga menggunakan aljabar vektor,
perhatikan sifat-sifat cross product vektor satuan

SISTEM KOORDINAT
Sistem Koordinat
Adalah cara pandang terhadap suatu keadaan. Ada
dua macam sistem koordinat :
􀂾 Sistem Koordinat Cartesian
􀂾 Sistem Koordinat Polar (Silinder)
􀂾 Sistem Koordinat Bola
• Sistem Koordinat Polar menggunakan sudut
terhadap garis horijontal (α) dan jarak dari titik pusat
(r) untuk menunjukkan lokasi sebuah benda
• Sistem Koordinat Cartesian menggunakan
pasangan (x,y) untuk menyatakan lokasi
sebuah benda di bidang (2D) dan pasangan
(x,y,z) untuk lokasi di ruang (3D).
• Sistem Koordinat juga dapat dibagi menjadi
dua macam bergantung kepada situasi :
􀀹 World Coordinate (wc) : Sistem Koordinate
untuk menyatakan lokasi suatu benda di “dunia”
(Lintang dan bujur dalam satuan derajat)
􀀹 Screen Coordinate (sc) : Sistem Koordinat
untuk menyatakan lokasi titik (dot)/ pixel/ vertex/
node di layar (Kolom dan baris dalam satuan
pixel)
Transformasi Antar Sistem Koordinat
• Dalam “world of models” bisa terdapat banyak
sistem koordinat
• Setiap sistem koordinat dinyatakan atas skala,
titik referensi relatif ke sistem koordinat referensi
• Terdapat sistem koordinat root yang menjadi
referensi dari setiap koordinat secara langsung
atau tidak langsung
Multiple Coordinate Systems
World Coordinate (WC)
World Coordinate mempunyai batas -~ sampai dengan +~
untuk sumbu x dan y
Sudut-sudut tertentu
-0
1/3√3
1
√3
~
-
-
-
0
-
-
-
~
-
-
-
0
½√4
½√3
½√2
½√1
-½√0
-½√1
-½√2
-½√3
-½√4
-½√3
-½√2
-½√1
½√0
½√1
½√2
½√3
½√4
½√0
½√1
½√2
½√3
½√4
½√3
½√2
½√1
-½√0
-½√1
-½√2
-½√3
-½√4
-½√3
-½√2
-½√1
½√0
0
30
45
60
90
120
135
150
180
210
225
240
270
300
315
330
360
Sudut Sinus Cosinus Tangen
Relasi Antar Koordinat
• Jika model adalah sistem koordinat, maka sistem
koordinat referensi dapat dipandang sebagai
transformasi geometris dari sistem koordinat
referensi
• Model sistem koordinat (B) hasil transformasi dari
sistem koordinat referensi (A) dengan matriks
transformasi MA􀃆B
Screen Coordinate (SC)
• Screen Coordinate menggunakan orientasi sumbu y yang
berbeda dengan World Coordinate
• Screen Coordinate hanya menggunakan nilai positif untuk
sumbu x dan y dan titik (0;0) terletak di pojok kiri atas
• Batas maksimal pada sumbu x = Xmax dan batas maksimal
pada sumbu y = Ymax
• Perbedaan orientasi tersebut menyebabkan
gambar di World menjadi tampak terbalik di
Screen
Transformasi wc 􀃆 sc
• Agar gambar di screen tampak sama dengan di world maka
perlu dilakukan transformasi koordinat
• Dengan demikian setiap titik di wc dapat diketahui lokasinya
di sc sebagai :
xsc = xwc
ysc = ymax – ywc
• Rumus (1) tidak dapat mengatasi persoalan :
􀀹 Pemakaian window dan viewport
􀀹 Nilai negatif dari koordinat wc
Window
Window merupakan sebagian area di World
Viewport
• Viewport merupakan sebagian area layar yang digunakan
untuk menampilkan window
• Isi window yang ditampilkan di viewport harus tetap
proporsional
Transformasi wc -> sc
Dimensi Grafika
Graphics merupakan elemen penting dalam proses disain
input output sistem atau aplikasi, grafik dapat
dibedakan :
1. Satu Dimensi, contoh, Line (garis), dot/ vertex/ pixel
(titik), dll
Ciri-ciri : Vector (arah), scalar (besaran)
2. Dua Dimensi, contoh : Bidang, misalnya box, circle,
rectangle,rounded rectangle, poligon, paralellogram,
trapezoid, diamond, octagon, isosceles triangle,
hexagon, cross, dll
Ciri-ciri : terdapat sisi, tinggi, panjang, lebar, keliling
dan luas
3. Tiga Dimensi, contoh ruang, misalnya objek-objek yang
memiliki isi dan volume
Geometri 2 dimensi (2D)
Dot merupakan unsur penting yang harus dilibatkan
dalam pembuatan grafik. Dot (inner atau skalar). 2D
akan menghasilkan 2 vektor, misalkan A dan B dapat
dituliskan A.B
c
N
(0,0)
U
V
Gambar 1.a dan 1.b.
Record Line : [
Implisit : N,c; titik P memenuhi N.P+c=0 (Gbr 1a)
Explisit : U,V; titik P memenuhi P = U + Vt (Gbr 1b)
Normalized : Bool 􀃅 False; True Iff |N| = |V|=1
]
Struktur Line untuk Circle dapat direpresentasikan :
Record Circle : [Center : C; radius : r]
Perhatikan diagram berikut :
Gambar 2 Gambar 3
A 􀃅 menormalisasi V2 (A) Normalisasi V2
V 2Length (A)
A← A
d 􀃅 V2 Dot(A,B) Dot V2
d 􀃅 AxBx + AyBy
l 􀃅 V2 implisit to explicit (l) V2 implicit to explicit
lu 􀃅 Titik V2 pada Line (l) dekat original
lv 􀃅 V2 tegak lurus (reflektivitas V2(lN))
l 􀃅 V2 explicit to implisit (l) V2 explicit to implisit
lN 􀃅 V2 tegak lurus (lv)
lc 􀃅 lN.lU
l 􀃅 Tangent line V2 pd circle (C) dengan satu titik (P) (Gambar 3)
tangent line V2 pd circle pada satu titik
lN 􀃅 P - PC
lc 􀃅 -(lN.P)
42
N 􀃅 V2 tegak lurus (V) (Gambar 4) V2 tegak
lurus
N 􀃅 (-Vx,Vy)
N 􀃅 V2 tegak lurus (V) (Gambar 5) reflektivitas V2
N 􀃅 (-Vy,-Vx)
d 􀃅 Length V2 (A) Length V2
d 􀃅
A.A
P1,P2 􀃅 V2 irisan Circle (C) dan line (l) (Gambar 6)
V2 irisan suatu circle dan line
G 􀃅 lU- Cc
V
N
Gambar 4
V
N
Gambar 5
P1
P2
Gambar 6
G
P θ
A
G’
G
B
Gambar 7
a 􀃅 lv.lv
b 􀃅 2(lv.G)
c 􀃅 (G . G) – C
d 􀃅 b2 – 4ac
If d < 0 then “no. intersection”
else
P1 􀃅 (-b + ) / 2a
P2 􀃅 (-b - d ) / 2a
d
l,m 􀃅 V2 adalah Tangent Line V2 pada 2 circle menemukan
sisi luar dengan label A dan B sehingga Ar ≥ Br (Gambar 7)
Asumsikan Ac original, dan Bc pada axis X
Dengan membuat line paralel pada axis x melalui H, irisan line
AcG pada titik j. Konstruksi |JG| = Ar – Br
Catatan : cos θ = (Ar-Br) / (Ac-Bc)
G 􀃅 Ac+Ar(cos θ, sin θ)
G’ 􀃅 Ac+Ar(cos-θ, sin-θ)
H 􀃅 Bc+Br(cos θ, sin θ)
H’ 􀃅 Bc+Br(cos-θ, sin-θ)
l 􀃅 line V2 melalui 2 titik(G,H)
l 􀃅 line V2 melalui 2 titik(G’,H’)
l,m 􀃅 tangent line V2 terhadap 2 circle menemukan
sisi dalam (Gambar 8)
Dari segitiga bahwa : Ar/X = Br/(d-x)
d adalah jarak dari tengah d 􀃅 Bc – Ac
x 􀃅 (Bc – Ac) (Ar/ (Ar + Br))
M 􀃅 Ac + x
Catatan : cos θ = Ar / x dan θ = arccos(Ar/x)
G 􀃅 (Ar cos θ, Ar sin θ) + Ac
H 􀃅 (Br cos θ, Br sin θ) + Bc
l 􀃅 line V2 melalui 2 titik (G,M)
M 􀃅 line V3 melaui 2 titik(H.M)

l,m 􀃅 Tangent line V2 terhadap circle dan tegak
lurus pada garis (k) (Gambar 9)
P 􀃅 Cc + Crkv
Q 􀃅 Cc - Crkv
lN 􀃅 mN 􀃅 kV
lN 􀃅 -(lN.P)
mc 􀃅 V2 implicit to Explicit(l)
m 􀃅 V2 implicit to explicit(m)
G
θ
A
M
H
B
d
x
Gambar 8
Titik Pada Circle dekat Titik
Q􀃅 Titik pada Circle(C) terdekat titik (P) (Gambar 10)
Q 􀃅 Cc + Cr x V2 menormalisasi (P-Cc)
k
l
m
P
Q Gambar 9
Q
P
Gambar 10
Line V2 melalui 2 titik
l 􀃅 line V2 melewati 2 titik(A,B)
lu 􀃅 A
lv 􀃅 V2 menormalisasi (B-A)
l 􀃅 V2 explisit ke implicit(l)
Menormalisasi V2
l 􀃅 V2 menormalisasi(l)
lc 􀃅 lc / V2 length(lN)
lN 􀃅 V2 menormalisasi(lN)
lv 􀃅 V2 menormalisasi(lv)
ldinormalisasi 􀃅 TRUE
Jarak V2 dari titik ke line
D 􀃅 jarak V2 dari titik(P) ke line(l) (Gambar 11)
Q 􀃅 titik V2 pada line(l) terdekat pada titik(P)
d 􀃅 jarak V2 antara titik(P) pada titik(Q)
l
Q
P
d Gambar 11
Titik V2 line terdekat original
P 􀃅 titik V2 pada line(l) terdekat original
d 􀃅 titik V2 pada line(l) terdekat titik(O)
Titik V2 line terdekat titik
Q 􀃅 titik V2 pada line(l) terdekat titik(P)
untuk notasi disepakati dengan menuliskan N untuk lN dan c
untuk lc
Obeservasi 1 :
Q berada pada l maka (N.Q) + c = 0
Obeservasi 1 :
line lurus yang menghubungkan P dan Q adalah tegak lurus
terhadap l, sehingga P=Q+qN, terhadap semua nilai q.
Sehingga Q=P-qN
Masukkan Q ke persamaan Line, dan gunakan perkalian
untuk menyelesaikan q:
N.(P-qN)+c=0
N.P-q(N.N)+c=0
q=(c+N.P)/(N.N)
Letakkan kembali nilai q ke persamaan garis dalam obeservasi
2 untuk mendapatkan Q :
q 􀃅 lc+(lN.P) jika tidak lternormalisasi then
q 􀃅 q / (panjang V2(lN)
Q = P-qlN
Jarak V2 antara titik dengan titik
d 􀃅 jarak V2 antara titik(P) dan titik(Q)
d 􀃅 panjang V2(P-Q)
Line V2 tegak lurus terhadap line melalui titik
M 􀃅 line V2 tegak lurus terhadap line(l) terdekat titik(P)
Solusi Umum :
Q 􀃅 titik P2 pada line(l) terdekat titik(P)
m 􀃅 line V2 melalui titi(P) dan titik(Q)
Solusi Langsung : (A V2 tegak lurus (A))
input
explicit implicit
Explicit mu 􀃅 P mu 􀃅 P
mv 􀃅 lv mv 􀃅 lN
Output
implicit mN 􀃅lv mN 􀃅 lN
mc 􀃅 -lv.P mc 􀃅 -lN .P
Cosinus V2 dari sudut antara line dan line
d 􀃅 Cosinus V2 dari sudut antara line(l) dan line(m)
d 􀃅 (lv.mv)
If not lnormalize and mnormalize then
d 􀃅 d / (panjang V2(lv).panjang V2(mv))
Titik V2 dari irisan antara line dan line
P􀃅titik V2 dari irisan antara line(l) dan line(m)
Titik P harus pada kedua line yang memenuhi persamaan line
baik explicity dan implicity : In.P+lc=0 dan P=mu + tmv. Jika
keduanya dalam waktu sama maka :
lN.(mu+tmv+lc=0
(lN.mu)+t(lN.mv)+lc=0
t=-(lc+(lN.mu)/(lN.mv)
lN.mv=0, ini menunjukkan kedua line adalah paralel dan tidak
irisan sama sekali. Nilai kembali bentuk explicit dan
menemukan nilai pada irisan :
d 􀃅 ln.mv
if d=0 then Error[“tidak ada nilai irisan”] else
P 􀃅 mu-(((ln.mu)+lc)/d)mv
Paramater V2 dari titik pada line dari titik ke titik
a 􀃅 parameter V2 dari titik(P) pada line dari titik(Q) ke titik(R)
Jarak V2 antara titik(P) ke titik(Q)
A 􀃅
Jarak(V2) antara titik(P) ke titik(Q+R)
Area V2 dari Poligon
a 􀃅 area V2 dari poligon(P), poligon memiliki n titik p0, p1, …,
pn-1
d 􀃅 titik V2 pada line(l) terdekat titik(O)
Σ−
=
=
1
2 1
1 n
i
a (XiY(i-1) mod n – YiX(i-1)
modn)
GARIS (LINE)
Menggambar Garis
• Masalah :
Pixel mana yang harus dipilih untuk menggambar sebuah
garis ?
Kuadran Garis
Di kuadran mana garis A ?
Di kuadran mana garis B ?
Dapatkah garis A dan B berada di kwadran yang sama ?
Dapat garis A dan garis dibuat kontinu ? Beleh melalui (0,0)
Bagaimana caranya ?
Bagaimana halnya dengan garis C dan D ?
Mengubah Kuadran Garis (Mengubah Vector)
• Garis A : (3;1) – (8;4) Garis A di kuadran I (berapa panjang line)
• Garis B : (3;7) – (1;2)
􀂾 Garis B berada di kuadran III
􀂾 m = (2 – 7) / (1 – 3) = -5 / -2 = 2.5
􀂾 tetapi apabila garis B dinyatakan sebagai (1;2) – (3;7) maka
garis B akan berada di kuadran I : m = (7–2 ) / (3–1) = 5 / 2 =
2.5
• Garis A (x1;y1) – (x2;y2) di kuadran III diubah menjadi garis di
kuadran I
􀂾 tX = x1 ; tY = y1;
􀂾 x1 = x2 ; y1 = y2;
􀂾 x2 = tX ; y2 = tY;
Dengan cara yang sama anda dapat mengubah garis di
kuadran IV menjadi garis di kuadran II
Karakteristik Garis
Kuadran I / II
• Garis di kuadran I
􀂉 nilai x bertambah
􀂉 nilai y bertambah
• Garis di kuadran II
􀂉 nilai x berkurang
􀂉 nilai y bertambah
Algorithma Garis (awal)
• Diketahui garis P (x1;y1) – (x2;y2)
(1) Tentukan kuadran garis
􀂾Kuadran III ubah Kuadran I ke (2)
􀂾Kuadran IV ubah Kuadran II ke (2)
(2) Gambar garis menggunakan algorithma yang sesuai
Catatan : Untuk garis di kuadran II gunakan algorithma kuadran I
tetapi nilai x berkurang (xberikut = xsebelum -1)
Algorithma Garis
• Algorithma garis adalah algorithma untuk menentukan lokasi
pixel yang paling dekat dengan garis sebenarnya (actual
line)
• Ada tiga algorithma utama untuk menggambar garis :
􀂾 Line Equation
􀂾DDA Algorithm
􀂾 Bresenham’s Algorithm
Line Equation
• Sebuah garis lurus dapat diperoleh dengan menggunakan
rumus : y = mx + b dimana :
m = gradien, b = perpotongan garis di sumbu x & y
• Apabila dua pasang titik awal dan akhir dari sebuah garis
dinyatakan sebagai (x1;y1) and (x2;y2), maka nilai dari
gradien m dan lokasi b dapat dihitung dengan :
• Persamaan Garis dapat digunakan di semua kwadran
Contoh
Gambar garis (0;1) – (5;7) dengan menggunakan Line Equation,
sehingga :
Gradien dan Tipe Garis
Tipe Garis
Dapatkah anda mencari perbedaan yang esensial antara
garis A dan B (misal : gradien, pertambahan x dan y) ?
Tipe Garis
􀂙 Garis A : (3;1) – ( 8;4)
􀀹 m = (y2 – y1) / (x2 – x1) = (4-1)/ (8-3) = 3/5= 0,6
􀀹 0 < m < 1
􀀹 xi+1 = xi + 1 ; yi+1 = yi + d1
􀂙 Garis B : (1;2) – (2;7)
􀀹 m = (7-2) / (2-1) = 5 / 1 = 5
􀀹 m > 1
􀀹 xi+1 = xi + d2 ; yi+1 = yi + 1
􀂙 Berapa nilai d1 dan d2 ?
Algorithma DIGITAL DIFFERENTIAL
ANALYZER (DDA)
• Digital differential analyzer (DDA) merupakan algoritma
untuk menghitung posisi pixel di sepanjang garis dengan
menggunakan posisi pixel sebelumnya
• Algoritma ini menggunakan asumsi bahwa garis berada di
kuadran I atau II serta tipe garis cenderung tegak atau
cenderung mendatar
• Mengatur titik-titik koordinat pada masing-masing sumbu
Algorithma DDA
Untuk garis dengan 0< m ≤1 (cenderung mendatar), maka :
Untuk garis dengan m > 1
(cenderung tegak), maka :
Garis dengan 0 > m > -1
(cenderung mendatar di Kw II), maka:
Sedangkan bila m < -1
(cenderung tegak di Kw II), maka :
Contoh Algorithma DDA
Gambar garis dari (0;1) – (5;7) dengan menggunakan DDA
Algorithma Bresenham
• Selain DDA terdapat Bresenham mengembangkan
algoritma yang lebih efisien
• Algoritma ini mencari nilai integer yang paling mendekati
garis sesungguhnya (actual line)
• Algoritma ini tidak memerlukan pembagian dan hanya
dapat digunakan untuk garis yang berada di kuadran I
d1=m – ½, karena d1< 0 atau negatif maka pixel
berikutnya adalah pixel (xi+1, yi)

Bresenham Kuadran1 (dy < dx)
Algorithma Bresenham
Gambar garis berikut ini dengan menggunakan algorithma
Bresenham : (0;1) – (6;5)
(2;2) – (7;5)
(0;1) – (5;7)
• Mengapa garis (0;1) – (5;7) tidak dapat digambar dengan
tepat ? Karena Garis (0;1) – (5;7) mempunyai m = 1,2,
dengan demikian asumsi pada algorithma dengan 0 < m < 1
tidak tepat dan harus disesuaikan
• Garis dengan m > 1 merupakan garis cenderung tegak
sehingga : perubahan cenderung terjadi pada sumbu Y
Bresenham Kuadran1( dy > dx)
Algoritma Bresenham Kuadran II (*)
Algoritma Bresenham Kuadran II (**)
(dy<dx)
Algorithma Bresenham Kuadran II (***)
(dy > dx)
Contoh pemakaian bresenham K2
Hitung pixel untuk menggambarkan garis (6;1) – (1;4)
Cek kuadran :
• (x1 > x2) dan (y1 < y2) 􀃆 Kuadran II
• abs(dx) = x2 – x1 = 1 – 6 = -5 = 5
• abs(dy) = y2 – y1 = 4 – 1 = 3
• dy> dx 􀃆 3 > 5 􀃆 F 􀃆 gunakan flowchart **
• abs(dx) = 5 ; abs(dy) = 3
• d1 = 2 * dy = 2 * 3 = 6
• d2 = 2 * (dy – dx) = 2 * (3 – 5) = 2 * -2 = -4
• p = d1 – dx = 6 – 5 = 1
• x = x1 = 6 ; y = y1 = 1;
• p >= 0 􀃆 1 >= 0 􀃆 Y
• p = p + d2 = 1 + (-4) = -3
• y = y + 1 = 1 + 1 = 2
• x = x – 1 = 6 – 1 = 5
• x <= x2 􀃆 5 <= 1 􀃆 T
Atribut Garis
LINGKARAN (Circle)
• Menggambar lingkaran dapat menggunakan rumus :
sin dan cosinus
Algorithma Bresenham
• Pemakaian sinus dan cosinus membutuhkan memori karena
melibatkan angka pecahan serta komputasi yang rumit
dalam menentukan nilai sinus dan cosinus

BRESENHAM’S CIRCLE
• Algorithma lingkaran bresenham melibatkan angka integer dan tidak
membutuhkan pembagian
• Algorithma yang disajikan berikut ini hanya membahas pada kuadran I yaitu
pada x ≥ 0 dan y ≥ 0
Algorithma Lingkaran Bresenham :
TUGAS
• Implementasikan algoritma lingkaran Bresenham ke dalam
salah satu bahasa pemrograman
• Tugas kelompok (maksimum 3 orang)
• Kumpulkan listing program dan printout hasil program.
• Dikumpulkan pada pertemuan berikutnya

TRANSFORMASI 2 DIMENSI
TRANSFORMASI
Merupakan suatu metoda untuk memanipulasi lokasi sebuah
titik
Ada 3 macam transformasi :
– Translation (Pergerseran)
– Scaling (Penskalaan)
– Rotation (Pemutaran)

TRANSLATION
• Titik A (x,y) digeser sejumlah Trx pada sumbu x dan digeser
sejumlah Try pada sumbu y
• Rumus Umum :
Q(x,y) = P(x,y) +Tr
= P(x+Trx, y+Try)

SCALING
• Menggunakan asumsi titik pusat (0,0)
• Lokasi asli dikalikan dengan besaran Sx pada sumbu x dan
Sy pada sumbu y
• Rumus Umum :
CONTOH
ROTASI
Perhatikan gambar di bawah ini :
ROTASI / PENSKALAAN PADA
SEMBARANG TITIK PUSAT
• Tahapan untuk melakukan rotasi atau penskalaan dengan
sembarang titik pusat
- Lakukan pergeseran sebesar (-xr,-yr)
- Lakukan rotasi atau penskalaan
- Lakukan pergeseran sebesar (xr,yr)
Contoh :
Diketahui : Titik A(1,1); B(3,1); C(2,3)
Jawab :
a) Pergeseran sebesar (-2,-2)
A’=(1-2,1-2) = (-1,-1)
B’=(3-2,1-2) = (1,-1)
C’=(2-2,3-2) = (0,1)
b) Penskalaan
Skalakan sebesar (3,3) titik tersebut
dengan menggunakan titik pusat (2,2)
A”= (-1*3,-1*3) = (-3,-3)
B”= (1*3,-1*3) = (3,-3)
C”= (0*3,1*3) = (0,3)
c) Pergeseran sebesar (2,2)
A”’ = (-3+2,-3+2) = (-1,-1)
B”’ = (3+2,-3+2) = (5,-1)
C”’ = (0+2,3+2) = (2,5)
TRANSFORMASI MENGGUNAKAN
MATRIKS
• Rumus transformasi juga dapat dinyatakan dengan matriks
seperti berikut
• Sehingga rumus transformasi menjadi :

MATRIKS TRANSFORMASI
CONTOH
Diketahui : Titik A (2,1)
Ditanyakan : Lokasi titik yang baru setelah translasi (2,4)
Jawab :
Matriks Transformasi Antar Sistem Koordinat
• Suatu obyek PB yang didefinisikan dalam
koordinat model (B) hendak diketahui
koordinatnya dalam sistem koordinat
referensi (A) menjadi PA maka berlaku :
PA = MA􀃆B PB
• Sebaliknya model dalam SK A dapat
dinyatakan di SK B dengan MB􀃆A= (MA􀃆B)-1
• PB = MB􀃆A PA = (MA􀃆B)-1 PA

TRANSFORMASI BERTURUT-TURUT
• Transformasi berturut-turut dapat dihitung dengan
menggunakan rumus :
• Mb merupakan matrik transformasi baru dan M1...Mn
merupakan komponen matrik transformasi
CONTOH
Diketahui : Titik A(1,1);B(3,1);C(2,3)
Ditanyakan :
Lokasi titik yang baru setelah dilakukan transformasi
pergeseran (2,3) dan kemudian penskalaan (3,3)
Contoh
SK B dengan referensi pada SK A :
– origin B pada (10, 5) SK A
– rotasi 30o
Dimanakah PB = (5, 2) di dalam sk A?
MA􀃆B = T(10, 5).R(30o),
jadi PA = MA􀃆B .PB
Dimanakah PA = (15, 15) di dalam SK B?
PB = MB􀃆A PA
= R(-30o).T(-10,-5).PB
Rantai Referensi Antar Sistem Koordinat
• Secara umum, model sistem koordinat dapat
dibuat pada koordinat referensi model lainnya
• JikaMA􀃆B, MB􀃆C adalah matriks, matriks
transformasi sistem koordinat
􀀹MA􀃆B adalah SK B dengan SK referensi A
􀀹MB􀃆C adalah SK C dengan SK referensi B
• JikaPc adalah model yang didefinisikan di C.
Maka dalam model SK A tersebut memiliki
koordinat PA sebagai berikut :
PA = MA􀃆B MB􀃆C PC

Vektor Arah Sumbu-y
• Jika diketahui vektor V yang menyatakan sumbu-y
sistem koordinat B serta posisi originnya (x0, y0)?
• Jika vektor unit arah sumbu-y
• Sementara, vektor unit arah sumbu-x dapat
diperoleh dari v karena ortonormal
• Matriks transformasi antar sistem koordinat (untuk
menyatakan titik dalam SK B ke dalam SK A) :
• Matriks transformasi antar sistem koordinat (untuk
menyatakan titik dalam SK B ke dalam SK A) :
• Contoh :
• Dimanakah titik (15, 15) pada SK A jika dinyatakan dalam
SK B?

Transformasi Sistem Koordinat 3D
• Untuk kasus 3D biasanya diketahui dua vektor V dan W,
menyatakan arah sumbu-y dan arah sumbu-z dan
koordinat titik origin (x0, y0, z0)
• Vektor unit arah sumbu-y adalah
• Vektor unit arah sumbu-z adalah
maka, vektor unit arah sumbu-x adalah
• Matriks transformasi untuk menyatakan titik dalam sk B
ke dalam sk A:
• Matriks transformasi untuk menyatakan titik dalam sk A
ke dalam sk B:
Tugas
Hitung lokasi titik A (3,1), B (6,2); C (7,4);
D (2,5) setelah dilakukan transformasi berturutturut
:
(a) Translasi (-4,2)
(b) Rotasi 65o
(c) Skala (2,3) pada titik pusat (6,2)

DUNIA 3 DIMENSI
• Apa yang membedakan 2 dimensi dengan 3 dimensi ?
– 2 Dimensi : Tinggi dan Lebar, panjang, sisi
– 3 Dimensi : Tinggi, Lebar dan Kedalaman
• Kedalaman adalah jarak antara pemirsa(viewer) terhadap
benda yang dia lihat

Tiga Dimensi
• Bagaimana manusia memperoleh kesan kedalaman ?
– Manusia mempunyai dua mata
– Kedua mata mempunyai selisih sudut pandang 120o
– Perbedaan sudut pandang membuat masing-masing
mata memperoleh gambar yang berbeda untuk objek
yang sama
– Perbedaan gambar diproses oleh otak sehingga akan
diperoleh kesan 'kedalaman' atau jarak benda
• Percobaan : Tutup salah satu mata anda selama kurang
lebih 2 hari dan anda akan mengetahui bahwa anda tidak
dapat menentukan dengan mudah jarak antara anda
dengan benda yang anda lihat

Sifat-sifat 3 dimensi
• Setiap titik dalam 3 dimensi ditentukan oleh tiga posisi :
– x : jarak titik tersebut terhadap sumbu x
– y : jarak titik tersebut terhadap sumbu y
– z : jarak titik tersebut terhadap sumbu z
• Posisi sebuah titik dalam 3 dimensi dituliskan dalam bentuk
(x,y,z)
• Bagaimana menggambarkan sumbu 3 dimensi ?

Benda 3 Dimensi dan Komputer
• Komputer dapat digunakan untuk mengolah benda tiga
dimensi
• Ada tiga persoalan dalam mengolah benda tiga dimensi
menggunakan komputer :
– Pembuatan lokasi titik 3D
– Manipulasi titik 3D
– Transformasi titik 3D menjadi 2D
Pembuatan Lokasi Titik 3D
Ada 3 macam proses untuk menghasilkan lokasi titik 3D :
– Penentuan langsung menggunakan peralatan seperti
mouse3D, scanner3D berbagai peralatan lain
– Menggunakan parametric surface
– Menggunakan prosedur khusus seperti extrude dan surface
of revolution

Scanner 3D
• Scanner 3D merupakan peralatan yang digunakan untuk
menghasilkan lokasi titik-titik 3D secara langsung dengan
menunjuk lokasi titik tersebut
• Contoh peralatan : mouse, trackball, laser scanner dan
sebagainya
Parametric Surface
• Digunakan untuk menghasilkan benda-benda yang dapat
direpresentasikan dalam rumus matematika seperti : bola,
donut, tabung, cone dan sebagainya

Parametric Surface
Extrude (Menekan)
• Merupakan prosedur menghasilkan lokasi titik 3D dengan
menarik titik-titik 2 dimensi ke satu arah tertentu
Surface of Revolution
• Prosedur untuk menghasilkan lokasi titik 3D dengan cara
memutar profile pada sumbu putar

Representasi Struktur Data Titik 3D
• Titik 3D dapat disimpan sebagai :
– Mesh
– Rumus matematika
– Titik profile
Mesh
• Mesh merupakan kumpulan titik 3D yang saling
dihubungkan
• Model yang dihasilkan disebut sebagai wireframe model
• Permukaan benda (surface) diperoleh dengan
menghubungkan titik-titik vertex baik dalam bentuk
segiempat atau segitia
• Umumnya digunakan surface dalam bentuk segitiga karena
bentuk segitiga akan selalu berada dalam keadaan planar
(datar)
Mesh
• Mesh dengan surface segi-empat
• disimpan sebagai record :

Proses Komputer 3D
TRANSFORMASI 3 DIMENSI
TRANSFORMASI
• Metoda untuk memanipulasi lokasi sebuah titik
• Ada 3 macam transformasi :
– Translation (Pergerseran)
– Scaling (Penskalaan)
– Rotation (Pemutaran)
TRANSLATION
• Titik A (x,y,z) digeser sejumlah Trx pada sumbu x dan
digeser sejumlah Try pada sumbu y serta Trz pada sumbu z
• Matriks :

SCALING
• Menggunakan asumsi titik pusat (0,0,0)
• Lokasi asli dikalikan dengan besaran Sx pada sumbu x dan
Sy pada sumbu y serta Sz pada sumbu z

ROTASI
• Ada tiga sumbu yang digunakan untuk melakukan rotasi
yaitu : – Rotasi pada sumbu x
– Rotasi pada sumbu y
– Rotasi pada sumbu z
• Pada rumus berikut ini c = cos (theta) dan s=sin (theta)

MENGGUNAKAN ROTASI UNTUK
MELIHAT BENDA
• Rotasi dapat digunakan untuk melihat sisi lain dari benda.
• Untuk melihat sisi lain dari benda lakukan rotasi berturutturut
minimal pada dua sumbu rotasi
• Cara ini tidak efisien untuk lingkungan yang mempunyai
banyak benda

SOAL
1. Diketahui sebuah benda dengan vertex dan edge
seperti pada Tabel 1
2. Gambarkan benda tersebut sebelum dan sesudah diskala
sebesar (2,3,2)
3. Gambarkan benda tersebut sebelum dan sesudah diputar
pada sumbu z sebesar 45o
catatan : sin(45) = 0,7071 ; cos (45) = 0,7071

PROYEKSI
• Proyeksi adalah metoda menggambarkan benda tiga
dimensi pada bidang 2 dimensi
• Ada 2 cara melakukan proyeksi :
Proyeksi paralel :
Semua garis paralel akan tampak paralel pada bidang
proyeksi
Proyeksi perspektif :
Semua garis paralel akan menghilang di titik pusat
proyeksi

PROYEKSI PARALEL
• Ada dua macam proyeksi paralel :
Proyeksi Orthographic
Proyeksi Oblique
• Proyeksi orthographic adalah proyeksi dengan mata tegak
lurus terhadap bidang proyeksi
• Proyeksi Oblique adalah proyeksi dengan mata berada di
lokasi yang tidak tegak lurus terhadap bidang proyeksi

PROYEKSI ORTHOGRAPHIC
• Proyeksi orthographic dibagi menjadi 2 macam :
Pandangan Multiview Orthographic
Pandangan Axonometric yang dibagi menjadi tiga :
- Isometric : Proyeksi dimana 3 muka dipendekkan
dalam ukuran yang sama
- Dimetric : Proyeksi dimana 2 muka benda dipendekkan
dalam ukuran yang sama
- Trimetric : Proyeksi dimana 2 muka dipendekkan
dalam ukuran yang berbeda

PROYEKSI MULTIVIEW
ORTHOGRAPHIC
• Proyeksi ini diperoleh dengan me-nol-kan salah satu
koordinat sesuai dengan sumbu proyeksi
• Terhadap bidang xy : Q(x,y) = P(x,y,z)
• Terhadap bidang xz : Q(x,z) = P(x,y,z)
• Terhadap bidang yz : Q(y,z) = P(x,y,z)

PROYEKSI MULTIVIEW
ORTHOGRAPHIC
PROYEKSI AXONOMETRIC
PROYEKSI OBLIQUE
• Memproyeksikan ke garis sejajar yang tidak tegak lurus
terhadap bidang proyeksi
• Dibagi menjadi dua macam :
Cavalier
Cabinet
PROYEKSI PERSPEKTIF
• Proyeksi perspektif bergantung pada dua variable:
lokasi mata dan bidang proyeksi
• Dengan bidang proyeksi adalah bidang xy dan titik terletak
di sumbu z sejauh E maka titik hasil proyeksi akan z = 0
apabila :
• dengan E > z
Contoh proyeksi perspektif
Diketahui sebuah benda dengan vertex-vertex dan edge
seperti tabel di bawah ini, lakukan proyeksi perspektif jika
E terletak di z=10 dan z = 20 :
Contoh proyeksi perspektif
CLIPPING
ALGORITHMA CLIPPING COHENSUTHERLAND
Clipping
• Clipping adalah metoda untuk hanya menampilkan garis
pada area yang visible (terlihat)
Visible dan Invisible Line
• Berdasarkan posisi garis terhadap areagambar maka garis
dapat dibedakan menjadi :
• Bagaimana menentukan visible dan invisible line?
- Fully visible : (x1 ≥ xmin) dan (x1 ≤ xmax) dan (y1 ≥ ymin)
dan (y1 ≤ ymax) dan (x2 ≥ xmin) dan (x2 ≤ xmax) dan
(y2 ≥ ymin) dan (y2 ≤ ymax)
- Partially visible : coba sendiri dan anda akan menemukan
bahwa tidak mudah melakukan hal tersebut
Algorithma Clipping
• Berbagai algorithma telah dikembangkan untuk menangani
masalah pemotongan garis tersebut, antara lain :
Cyrus-Beck
Cohen-Sutherland
Algorithma Cohen-Sutherland
• Area gambar dibatasi oleh xmin,xmax, ymin,ymax
Algorithma Cohen-Sutherland
• Cohen dan Sutherland memberikan kode kepada tiap area
yang mungkin dilewati oleh sebuah garis atau disebut
sebagai region code

T(op) = 1 jika ujung garis berada di atas area gambar selain
itu 0 (nol)
B(ottom) = 1 jika ujung garis berada di bawah area gambar
selain itu 0 (nol)
L(eft) = 1 jika ujung garis berada di kiri area gambar selain itu
0 (nol)
R(ight) = 1 jika ujung garis berada di kanan area gambar
selain itu 0 (nol)
Algorithma Cohen-Sutherland
• Region code mempunyai panjang empat bit dan
menggunakan urutan sebagai berikut :
Algorithma Cohen-Sutherland
Algorithma Cohen-Sutherland
Algorithma Cohen-Sutherland
• Pemotongan (clipping) dilakukan terhadap ujung-ujung garis
yang region code berisi bit bernilai 1.
• Contoh sebelumnya menunjukkan bahwa ujung Pa, Pb,
Qc,Qd dan Re yang akan mengalami pemotongan
Algorithma Cohen-Sutherland

Algorithma Cohen-Sutherland
• Dengan menggunakan cara yang sama maka lokasi titik
potong untuk tiap area akan sesuai tabel di bawah ini :

Algorithma Cohen-Sutherland
• Koordinat titik potong dapat dicari dengan cara :
Contoh
Diketahui : area gambar : (1,2)-(5,5)
Ditanyakan :
􀂃 lokasi titik potong dari garis P (2,1) - (4,6) terhadap
area gambar
􀂃 lokasi titik potong dari garis S (2,6) - (6,3)

Algorithma Cohen-Sutherland
Untuk ujung-ujung garis dengan region code berisi bit 1
maka ada tiga kemungkinan perpotongan antara garis P
dengan area gambar
Algorithma Cohen-Sutherland
• Apabila ditemukan lebih dari satu titik potong maka pilih titik potong
yang paling "dekat“ dengan area gambar
• Bagaimana pengertian "dekat“ didefinisikan?
Tugas anda mendefinisikan pengertian "dekat“ tersebut
Tugas (kelompok) :
Tentukan titik-titik potong dari garis-garis berikut :
• P = (2,1) - (6,7)
• Q = (2,3) - (7,5)
• S = (4,2) - (8,7)
pada area gambar (2,2) - (5,5)

Histogram Citra
Histogram citra adalah grafik yang menggambarkan
penyebaran nilai-nilai intensitas pixel dari suatu citra atau
bagian tertentu di dalam citra.
Membuat Histogram
• Misalkan citra digital memiliki L derajat keabuan, yaitu dari
nilai 0 sampai L – 1 (misalnya pada citra dengan kuantisasi
derajat keabuan 8-bit, nilai derajatkeabuan dari 0 sampai
255). Secara matematis histogram citra dihitung dengan
Rumus :
Dimana :
ni = jumlah pixel yang memiliki derajat keabuan i
n = jumlah seluruh pixel di dalam citra
Plot hi versus fi dinamakan histogram. Gambar 6.1 adalah
contoh sebuah histogram citra. Secara grafis histogram
ditampilkan dengan diagram batang. Perhatikan dari
persamaan di atas bahwa nilai ni telah dinormalkan dengan
membaginya dengan n. Nilai hi berada di dalam selang 0
sampai
Sebagai contoh, misalkan matriks di bawah ini menyatakan
citra digital yang berukuran 8 × 8 pixel dengan derajat
keabuan dari 0 sampai 15 (ada 16 buah derajat keabuan) :
Tabulasi perhitungan histogramnya ditunjukan pada Tabel
di bawah ini, mudah dilihat bahwa semakin besar nilai ni
maka semakin besar pula nilai hi

Algoritma Perhitungan Histogram
Algoritma perhitungan histogram ditunjukkan pada Algoritma
berikut di bawah ini :
Citra masukan mempunyai 256 derajat keabuan yang nilainilainya
dari 0 sampai 255. Intensitas pixel disimpan di
dalam Image[0..N-1][0..M-1], sedangkan histogram
disimpan di dalam tabel Hist[0..255]. Gambar di bawah ini
memperlihatkan histogram citra kapal (512 × 512).
Beberapa program komersil seperti Adobe Photoshop,
Paintshop, dan PolyView, dapat digunakan untuk
membangkitkan histogram citra
Khusus untuk citra berwarna, histogramnya dibuat untuk setiap
kanal RGB (merah, hijau, dan biru). Misalnya citra berwarna
pepper 512 × 512 pixel 8-bit, pada di bawah ini histogramnya ada
tiga buah, masing-masing untuk komponen merah, hijau, dan
biru. Histogram tersebut dihasilkan dari program

Histogram citra memberikan informasi penting sebagai berikut :
1. Nilai hi menyatakan peluang (probability) pixel, P(i), dengan
derajat keabuan i. Jumlah seluruh nilai hi sama dengan 1, atau
Peluang suatu pixel memiliki derajat keabuan lebih
kecil atau sama dengan derajat keabuan tertentu
adalah jumlah hi untuk 0 ≤ i ≤ j, atau
2. Puncak histogram menunjukkan intensitas pixel yang menonjol.
Lebar dari puncak menunjukkan rentang kontras dari gambar. Citra
yang mempunyai kontras terlalu terang (overexposed) atau terlalu
gelap (underexposed) memiliki histogram yang sempit.
Histogramnya terlihat hanya menggunakan setengah dari daerah
derajat keabuan. Citra yang baik memiliki histogram yang mengisi
daerah derajat keabuan penuh dengan distribusi merata pada
setiap nilai inten-sitas pixel pada gambar berikut

Gambar berikut ini memperlihatkan tiga buah citra Lena. Citra Lena
yang pertama terlalu gelap. Histogramnya banyak menumpuk pada
bagian kiri karena citra tersebut mengandung banyak nilai intensitas
yang dekat dengan 0 (hitam). Citra Lena yang kedua terlalu terang.
Histogramnya banyak menumpuk pada bagian kanan karena citra
tersebut mengandung banyak nilai intensitas yang dekat dengan 255
(putih). Citra Lena yang ketiga adalah citra yang normal (bagus).
Histogramnya tersebar merata di seluruh daerah derajat keabuan. Tiga
buah histogram tersebut dihasilkan dengan program Adobe Photoshop

Teknologi Display
Metodologi Display
• Ada dua cara menampilkan gambar :
Vector Display
Raster Display
• Vector Display : gambar ditampilkan sebagai kumpulan
segmen garis (vector)
• Raster Display : gambar ditampilkan sebagai kumpulan titik
(pixel)
• Pada persoalan Komputer grafik tidak membahas tampilan
dengan vector display tetapi hanya tampilan denganRaster
Display

Raster Display
Raster Display menggunakan peralatan seperti :
Cathode Ray Tube (CRT)
Plasma Display
Liquid Cristal Display (LCD)
Prinsip kerja : menyalakan / mematikan satu titik
dipenampil
CRT
Paling banyak digunakan
Bekerja berdasarkan prinsip scanning :
Horizontal Scanning
Vertical Scanning
Scanning harus dilakukan dengan cepat untuk mencegah
efek kerdipan (flicker)

LCD
Liquid Crystal Displays (LCDs)
LCDs: organic molecules, naturally in crystalline state,
that liquefy when excited by heat or E field
Crystalline state twists polarized light 90º
Plasma Display
Plasma display panels
Similar in principle to fluorescent light tubes
Small gas-filled capsules are excited by electric
field,emits UV light
UV excites phosphor
Phosphor relaxes, emits some other color
Raster Display System
Raster Display System
• Setiap kondisi pixel di layar disimpan ke dalam memori yang
disebut : frame buffer
• Pixel mempunyai informasi mengenai :
lokasi = lokasi memori di frame buffer
warna = banyaknya bit di frame buffer yang digunakan
untuk menyimpan informasi tentang 1 pixel = 2n
􀂾 1 bit memori = 21 warna = 2 warna
􀂾 4 bit memori = 24 warna = 16 warna
􀂾 8 bit memori (1 byte) = 28 warna = 256 warna
Pixel, Warna dan Memori
􀂃 Jumlah pixel yang ditampilkan secara horisontal dan vertikal
disebut sebagai resolusi
􀂃 Kapasitas memori membatasi banyaknya pixel yang
ditampilkan dan warna yang dapat direpresentasikan.

3 komentar:

  1. Mantaappp artikelnya, cuman klo bisa halaman artikel ini di bngkus dngn "read more" atau "baca slengkapnya"..supaya tdk mnghbiskan hlman blog Agan..!!

    visit me on :

    http://www.kreativitasforall.blogspot.com/

    BalasHapus
  2. kita juga punya nih artikel mengenai 'Komputer Grafik', silahkan dikunjungi dan dibaca , berikut linknya
    http://repository.gunadarma.ac.id/bitstream/123456789/3308/1/Teknik%20Cube%20Mapping%20.pdf
    terimakasih

    BalasHapus
  3. kita juga punya nih artikel mengenai 'Grafik Komputer', silahkan dikunjungi dan dibaca , berikut linknya
    http://repository.gunadarma.ac.id/bitstream/123456789/836/1/D87-D95_Yusuf.pdf
    trimakasih
    semoga bermanfaat

    BalasHapus