Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran

Presentasi serupa


Presentasi berjudul: "Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran"— Transcript presentasi:

1 Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran
COMPUTER GRAPHICS D10K-5C01 GK02: Penggambaran Objek-objek Primitif Dr. Setiawan Hadi, M.Sc.CS. Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran

2 Topik Perkuliahan Pengantar Penggambaran objek primitif
Algoritma penggambaran garis Dasar, DDA, Bresenham Algoritma penggambaran lingkaran Dasar, Polar, Bresenham Algoritma pengisi region

3 Elemen Pembentuk Grafik

4 Objet Primitive menurut OpenGL

5 Objek-objek Primitif 3D (Autodesk)

6 Titik Perhatikan bahwa sistem koordinat dalam pemrograman grafis
berbeda dengan model koordinat kartesius

7 Penggambaran Objek Primitif
Kita akan mendiskusikan algoritma untuk Menggambar garis Menggambar lingkaran Menggambar Poligon Konsep tentang Filling

8 Garis Masalah: diberikan dua piksel P(xP, yP) dan Q(xQ, yQ) pada bidang 2D, bagaimana cara terbaik untuk menggambarkan garis yang melalui kedua titik tersebut ? Asumsi: xP<xQ, yP<yQ. (kasus-kasus lain akan ditangani dengan sedikit modifikasi) Kendala: Layar raster merupakan grid integer Q Q ??? P P

9 Penggambaran Garis Jaggies = Aliasing

10 Algoritma Penggambaran Garis
Algoritma Dasar Algoritma DDA Algoritma Bresenham

11 Algoritma Dasar Berdasarkan pada persamaan garis
Jika diketahui dua buah titik P(x1,y1) dan Q(x2,y2) maka Algoritma: Untuk setiap interval Δx terdapat nilai korespondensi y dengan interval Δy

12 Contoh Algoritma Dasar
Soal: Diketahui dua buah titik A(2,1) dan B(6,4). Tentukan titik-titik dijital yang dilalui oleh garis yang melalui kedua titik tersebut! Jawab: x y [y] 2 1.00 1 3 1.75 4 2.50 5 3.25 6 4.00

13 Latihan Tentukan koordinat titik-titik dijital untuk garis yang dibentuk oleh dua titik sebagai berikut: (-5,5) dan (1,2) (4,3) dan (8,-2) (2,3) dan (5,3) (2,3) dan (2,5) (6,4) dan (2,1) Gunakan algoritma DDA dan Bresenham untuk menentukan titik-titik dijital antara (-3,3) dan (-1,3) (7,-1) dan (-4,-6) (-3,3) dan (-1,-3)

14 DDA : Digital Differential Analyzer
Untuk meningkatkan kualitas penggambaran garis Slope (m) sebuah garis bisa positif atau negatif Keuntungan DDA: Lebih cepat dari cara sebelumnya Beban komputasi lebih ringan (tanpa perkalian) Arah increment bisa ke dua arah (x atau y) Kondisi Langkah m<=1, KIKA Δx=1, yi+1=yi+m m<=1, KAKI Δx=-1, yi+1=yi+m m>1, KIKA Δy=1, xi+1=xi+1/m m>1, KAKI Δy=-1, xi+1=xi-1/m

15 Algoritma DDA Algoritma: Inputkan (x1,y1) dan (x2, y2)
Hitung dx dan dy If |dx| > |dy| then s=|dx| else s=|dy| Δx=dx/s; Δy=dy/s Set x=x1; y=y1 x=x+ Δx; y=y+ Δy Lakukan langkah ke 6 sebanyak s kali Contoh: Tentukan dengan algorima DDA titik-titik dijital yang melalui garis yang dibentuk oleh titik (2,1) dan (6,4) Latihan: Lihat sebelumnya

16 Algoritma DDA

17 Algoritma Bresenham Penentuan koordinat menggunakan ‘integer arithmetic’ Di-optimasi berdasarkan jarak kedekatan dengan posisi grid

18 Algoritma Bresenham Hitung Δx=x2–x1 dan Δy=y2-y1 Hitung Δa dan Δb
Δa=|Δx| if |Δx| ≥|Δy| else |Δy| Δb=|Δy| if |Δx| ≥|Δy| else |Δx| Hitung = 2 Δb – Δa Tentukan m1 dan m2 m1=M3 jika |Δx| ≥ |Δy| dan Δx ≥0 m1=M5 jika |Δx| < |Δy| dan Δx <0 m1=M7 jika |Δx| ≥ |Δy| dan Δx <0 m1=M1 jika |Δx| < |Δy| dan Δx ≥0 m2=M2 jika Δx ≥ 0 dan Δy ≥ 0 m2=M4 jika Δx ≥ 0 dan Δy < 0 m2=M6 jika Δx <0 dan Δy <0 m2=M8 jika Δx < 0 dan Δy ≥ 0 Jalankan m2 jika  ≥ 0 lalu modifikasi = +2 Δb-2 Δa Jalankan m1 jika  < 0 lalu modifikasi = +2 Δb Ulangi langkah 5 sampai mencapai titik tujuan (x2, y2) M8 M1 M2 M7 M3 M6 M5 M4

19 Algoritma Bresenham procedure bres1(x1,y1,x2,y2:integer);
Var dx, dy, x, y, x_end, p, da, db, m1, m2 : integer; begin dx := x2-x1; dy := y2-y1; if abs(dx)>=abs(dy) then da:=abs(dx) else da:=abs(dy); if abs(dx)>=abs(dy) then db:=abs(dy) else db:=abs(dx); if (abs(dx)>=abs(dy)) and (dx>=0) then m1:=3; if (abs(dx)>=abs(dy)) and (dx<0) then m1:=7; if (abs(dx)<abs(dy)) and (dy>=0) then m1:=1; if (abs(dx)<abs(dy)) and (dy<0) then m1:=5; if (dx>=0) and (dy>=0) then m2:=2; if (dx>=0) and (dy<0) then m2:=4; if (dx<0) and (dy<0) then m2:=6; if (dx<0) and (dy>=0) then m2:=8; p := 2 * db - da;

20 Agoritma Bresenham (lanj.)
x:=x1; y:=y1; set_pixel(x,y); while (x <> x2) or (y<>y2) begin if p>=0 then p := p + 2*db - 2*da; case m2 of 2:begin x:=x+1;y:=y+1;end; 4:begin x:=x+1;y:=y-1;end; 6:begin x:=x-1;y:=y-1;end; 8:begin x:=x-1;y:=y+1;end; end; end else begin case m1 of 1:y:=y+1; 3:x:=x+1; 5:y:=y-1; 7:x:=x-1; end; p := p + 2* db; set_pixel(x,y);

21 PENGGAMBARAN LINGKARAN
Problem: Find the coordinates of the pixels that best draw an origin-centered circle F(x, y) = x2 + y2 - r2 = 0 Constraint: The raster screen is an integer grid Grafika Komputer

22 ALGORITMA PENGGAMBARAN LINGKARAN
Algoritma Dasar (Berdasarkan Persamaan Lingkaran) Algoritma Polar (berdasarkan sifat simetri dan properti lingkaran yaitu pusat dan jari-jari) Algoritma biasa dan polar memiliki kelemahan dalam penampilan lingkaran. Kelemahan ini dieliminasi oleh Algoritma Bresenham

23 Terlalu banyak perhitungan FLOATING-POINTS
Algoritma Sederhana Versi 1: for x = -R to R hitung y = sqrt(r2 – x2) tulisPixel(x, round(y)) tulisPixel(x, round(-y)) Versi 2: For alpha = 0 to 360o tulisPixel(r*cos(alpha), r*sin(alpha)) Terlalu banyak perhitungan FLOATING-POINTS

24 Representasi Lingkaran

25 Sifat Simetris Lingkaran

26 Algoritma Bresenham

27 Algoritma Bresenham BresenhamCircle(Xc, Yc, R)
Set X = 0 and Y = R Set D = 3 – 2R Repeat While (X < Y) Call DrawCircle(Xc, Yc, X, Y) Set X = X + 1 If (D < 0) Then D = D + 4X + 6 Else Set Y = Y –1 D = D + 4(X –Y) + 10 Call Draw Circle(Xc, Yc, X, Y) DrawCircle(Xc, Yc, X, Y) Call Put Pixel(Xc+ X, Yc, + Y) Call PutPixel(Xc-X, Yc, + Y) Call PutPixel(Xc+ X, Yc,-Y) Call PutPixel(Xc-X, Yc,-Y) Call PutPixel(Xc+ Y, Yc, + X) Call PutPixel(Xc-Y, Yc, + X) Call PutPixel(Xc+ Y, Yc,-X) Call PutPixel(Xc-Y, Yc,-X)

28 Algoritma Mengisi Region
Flood-filling Algorithm

29 Jenis Filling

30 Boundary filling

31 Color range

32 Geometrika Objek

33 Teknik flood filling data-centric process-centric
menggunakan queue untuk mengecek piksel tepi umumnya menerapkan 4-way flood-fill algorithm (why?) tampilan berupa expanding lozenge-shaped fill 4 pixels checked for each pixel filled (8 for an 8-way fill). process-centric menggunakan stack umumnya menerapkan 4-way flood-fill algorithm Tampilan berupa a linear fill with "gaps filled later" behaviour 4 pixels checked for each pixel filled (8 for an 8-way fill) penerapan pada sistem grafis komputer lama/kuno

34 Penerapan Algoritma Mengisi Rectangle Mengisi Poligon (xmin, ymin)
(xmax, ymax) For (y = ymin to ymax of rectangle) For (x = xmin to xmax of rectangle) WritePixel(x, y)

35 Konsep Mengisi Poligon
Find the intersections of the scan line with all edges, sort them in increasing order of x-coordinates: {a1, a2, …, an} = {a, b, c, d} Fill in all pixels between a2k and a2k+1. E.g. those between a and b, and between c and d

36 Mengisi Ellips atau Lingkaran
Scan the raster screen line by line If Line intersects the ellipse/circle twice Draw every pixel from the first intersection until (before) the second intersection If Line intersects only once Draw the intersection pixel

37 Ilustrasi1

38 Ilustrasi1

39 Ilustrasi

40 Ilustrasi

41 Program Dasar Floodfill (C++)
void ffill(int x,int y,int o_color,int n_color) { if(getpixel(x,y)==o_color) { putpixel(x,y,n_color); ffill(x+1,y,o_color,n_color); ffill(x,y+1,o_color,n_color); ffill(x,y-1,o_color,n_color); ffill(x-1,y,o_color,n_color); ffill(x+1,y+1,o_color,n_color); ffill(x-1,y-1,o_color,n_color); ffill(x-1,y+1,o_color,n_color); ffill(x+1,y-1,o_color,n_color); } } void main() rectangle(50,50,100,100); ffill(55,55,0,3);

42 Pendekatan Algoritma FloodFIll
Scan-line Seed-fill (boundary-fill)

43 Pendekatan Algoritma FloodFIll
Scan-line Seed-fill (boundary-fill)

44 Pendekatan Algoritma FloodFIll
Scan-line (raster-based fill) Seed-fill (boundary-fill)

45 Seed-fill algorithm

46 Memilih Seed-point

47 Algoritma Seed-fill

48 Neighbours

49 Beberapa Contoh Program FloodFill dalam C#
Akses situs :

50 Implementasi Region Filling

51 Implementasi Region Filling

52 Implementasi Region Filling

53 Implementasi Region Filling

54 Referensi Tentang Region Filling
COMP175 Region Filing Lec6 Area Fill Polygon fill


Download ppt "Program Studi S-1 Teknik Informatika FMIPA Universitas Padjadjaran"

Presentasi serupa


Iklan oleh Google