Grafika Komputer PS Teknik Informatika POLYGON Grafika Komputer PS Teknik Informatika
Pendahuluan Adalah bentuk yang disusun dari serangkaian garis Titik sudut dari polygon vertex Garis penyusun polygon edge
Pendahuluan Properti dasar polygon Jumlah vertex Koordinat vertex Data lokasi tiap vertex Polygon digambar dengan menggambar masing- masing edge dengan setiap edge merupakan pasangan dari vertex i – vertex i+1, kecuali untuk edge terakhir merupakan pasangan vertex n – vertex 1
Pendahuluan Operasi pada polygon a.l : Menginisialisasi polygon Menyisipkan vertex Menggambar polygon Mewarnai polygon
Algoritma Menggambar Polygon index = 1 selama index <= jumlah_vertex lakukan vertex1 = ambil vertex ke [index] jika index = jumlah_vertex maka vertex2 = ambil vertex ke [0] tetapi jika tidak maka vertex2 = ambil vertex ke [index+1] x1 = vertex1.x y1 = vertex1.y x2 = vertex2.x y2 = vertex2.y gambar garis dari (x1,y1) ke (x2,y2) index =index+1 akhir selama index <= jumlah_vertex
MENGISI POLYGON Terdapat 2 algoritma: Algoritma Flood Fill Algoritma ScanLine Fill Pemakai menentukan warna polygon serta lokasi titik yang menjadi titik awal Algoritma akan memeriksa titik-titik tetangga,jika tidak sama dengan warna isi polygon, maka titik tersebut akan diubah warnanya Proses berlanjut sampai seluruh titik yang berada dalam polygon selesai diproses.
Penentuan titik tetangga Terdapat 2 metode : Metode 4-koneksi Metode 8-koneksi
Algoritma Flood Fill dengan 4-koneksi Input x,y : integer {lokasi awal} Input fill : Tcolor {warna isian} Input oldcolor : Tcolor {warna lama} Mulai w = ambil warna pixel pada lokasi (x,y) jika w = oldcolor maka ubah warna pixel pada lokasi (x,y) menjadi berwarna fill floodfill (x+1, y, fill, oldcolor) floodfill (x-1, y, fill, oldcolor) floodfill (x, y+1, fill, oldcolor) floodfill (x, y-1, fill, oldcolor) Akhir algoritma
Algoritma Flood Fill Algoritma ini ditentukan : Titik awal (seed point) Apakah polygon yang diwarnai merupakan polygon tertutup
Algoritma ScanLine Fill (Garis Pindai) Cocok digunakan untuk mengisi sebuah polygon dimana area pengisian dibatasi oleh edge-edge sebuah polygon. Bekerja berdasarkan titik potong garis pindai (scanline)terhadap edge dari polygon untuk menentukan titik-titik yang berada di dalam sebuah polygon. Garis pindai : Garis dengan x=0 dan bergerak dari ymin menuju ymax dengan ymin menunjukkan koordinat y paling kecil dari vertex-vertex polygon dan ymax menunjukkan y terbesar.
Ilustrasi proses pemindaian
Proses pemindaian Ditujukan untuk menentukan atribut dalam dan atribut luar dari sebuah pixel Perwarnaan dilakukan untuk semua pixel yang mempunyai atribut dalam. Hal-hal yang perlu diperhatikan : Egde horisontal tak perlu diproses Garis pindai yang melewati dua vertex dari 2 edge yang searah akan menghasilkan 2 titik potong. Tambahan titik potong dapat mengacaukan pasangan atribut luar dalam
Contoh …
Cara Mengatasi Melakukan pengujian terhadap 2 edge berturutan dan bukan edge mendatar Apabila kemiringan (slope) dari kedua edge mempunyai tanda yang sama maka edge yang lebih rendah posisinya dipendekkan satu pixel edge shortening Edge yang mempunyai slope dengan tanda yang sama menunjukkan bahwa ujung dari edge tersebut tidak berada di titik ekstrem, baik ekstrim mak maupun min Sehingga salah satu titik ujung dari edge tersebut diturunkan satu titik pada sumbu y
Algoritma ScanLine Fill Algoritma bekerja berdasarkan lokasi vertex vertex-vertex dari polygon yang akan didisi harus disusun dalam urutan yang konsisten. Urutan pengisian vertex berlawanan dengan jarum jam
PEMINDAIAN POLYGON Garis pindai 1 memotong pasangan edge (e)(d), (d)(c), dan (c)(b) Garis pindai 2 memotong pasangan edge (e)(b) Garis pindai 3 memotong pasangan edge (e)(a) Garis pindai 4 memotong pasangan edge (f)(a)
TUGAS Bagaimana algoritma ScanLine Fill? Bagaimana komputer dapat mengetahui pasangan edge yang akan dicari perpotongannya dengan garis pindai? Apakah pasangan edge yang akan diproses harus dicari setiap kali mengganti garis edge? Apakah garis pindai harus dimulai dari y=ymin sampai y=ymax serta x=xmin sampai x=xmax?