Bài giảng Công nghệ đồ họa và hiện thực ảo - Bài 3: Giải thuật sinh các thực thể cơ sở sau đây bao gồm những nội dung về biểu diễn đoạn thẳng (thuật toán DDA, giải thuật Bresenham, giải thuật trung điểm); biểu diễn đường tròn, biểu diễn đường ê-líp, giải thuật sinh ký tự.
Bài GIẢI THUẬT SINH CÁC THỰC THỂ CƠ SỞ Trịnh Thành Trung trungtt@soict.hust.edu.vn NỘI DUNG Biểu diễn đoạn thẳng a) Thuật toán DDA b) Giải thuật Bresenham c) Giải thuật trung điểm Biểu diễn đường tròn Biểu diễn đường ê-líp Giải thuật sinh ký tự - Rời rạc hóa điểm ảnh • Là tiến trình sinh đối tượng hình học sở phương pháp xấp xỉ dựa lưới phân giải hình • Tính chất đối tượng cần đảm bảo : – mượt - smooth – liên tục - continuous – qua điểm xác định – độ sáng đồng – hiệu - efficient BIỂU DIỄN ĐOẠN THẲNG - •Biểu diễn tường minh (y-y1)/( x-x1) = ( y2-y1)/( x2-x1) y = kx + m – k = (y2-y1)/( x2-x1) – m = y1- kx1 – y = k x P(x2 , y2) u P(x1, y1) m Biểu diễn đoạn thẳng •Biểu diễn không tường minh (y2-y1)x - (x2-x1)y + x2y1 - x1y2 = hay rx + sy + t = P(x2 , y2) – s = -(x2-x1 ) – r = (y2-y1) t = x2y1 - x1y2 u P(x1, y1) m Biểu diễn đoạn thẳng •Biểu diễn tham biến P(u) = P1 + u(P2 - P1) u [0,1] X = x1 + u( x2 - x1 ) Y = y1 + u( y2 - y1 ) P(x2 , y2) u P(x1, y1) m Biểu diễn đoạn thẳng Giải thuật thông thường Giải thuật DDA Với < k < xi+1 = xi + yi+1 = yi + k với i=1,2,3 DrawLine(int x1,int y1, int x2,int y2, int color) { float y; int x; for (x=x1; x d2 => yi+1 = yi D = d1 - d2 = -2k(xi + 1) + 2yi - 2b + Pi = xD = x (d1 - d2) Giải thuật Bresenham 10 BIỂU DIỄN ĐƯỜNG TRỊN VÀ ĐƯỜNG Ê-LÍP - Giải thuật trung điểm cho đường trịn • Sử dụng phương pháp biểu diễn không tường minh giải thuật x x 2 y y 2 r c c • Thực giải thuật 1/8 đường tròn lấy đối xứng xho góc cịn lại • Với di giá trị đường trịn điểm ta có if xi , yi is inside circle d i if xi , yi is on circle if x , y is outside circle i i 19 Giải thuật trung điểm cho đường tròn d = 1-r initialisation x = y = r stop at diagonal end of octant while y < x if d < then d = d+2*x+3 choose A x = x+1 else d = d+2*(x-y)+5 x = x+1 choose B y = y-1 endif SetPixel(cx+x,cy+y) endwhile Translate to the circle center 20 Giải thuật trung điểm cho đường ê-líp • Tương tự hình trịn • Áp dụng giải thuật cho ¼ đường ê-líp, sau lấy đối xứng cho vị trí cịn lại • Phương trình đường ê-líp F ( x, y) b2 x a y a 2b2 – 2a: đường kính ngang – 2b: đường kính dọc 21 BIỂU DIỄN ĐA GIÁC - Giải thuật đường quét sinh đa giác • Tồn nhiều giải thuật sinh đa giác • Mỗi giải thuật phục vụ cho loại đa giác định: • Một số giải thuật sử dụng với tam giác • Một số giải thuật địi hỏi đa giác lồi, khơng tự cắt khơng có lỗ hổng bên 23 Giải thuật đường quét sinh đa giác • Polygon scan conversion giải thuật chung kinh điển cho loại khác • Cho đoạn thẳng quét, xác định cạnh đa giác cắt đoạn thẳng 24 Giải thuật đường quét sinh đa giác • Dùng giải thuật (trung điểm) để xác định điểm biên cho đa giác theo thứ tự tăng x • Các điểm phải: – Khơng bị chia sẻ đa giác lân cận – Các đa giác tồn điểm cạnh (điểm biên) • Đảm bảo đa giác chia sẻ điểm biên mà không chia sẻ điểm ảnh bên 25 Giải thuật đường quét sinh đa giác • Thủ tục chung: – Xác định giao đường thẳng quét với cạnh đa giác – Sắp xếp giao điểm theo mức độ tăng dần x value – Điền điểm ảnh vào cặp điểm x 26 Giải thuật đường quét sinh đa giác integer x value is on right = exterior horizontal edge removed rounded down for A rounded up for B ymax not included 27 BIỂU DIỄN KÝ TỰ - Giải thuật sinh ký tự • Trên sỏ định nghĩa ký tự với font chư cho trước bitmap chữ nhật nhỏ • Font/typeface: set of character shapes • fontcache – ký tự theo chuỗi liên tiếp nhớ • Dạng – (thường N, nghiêng I, đậm B, nghiêng đậm B+I) • Thuộc tính – Also colour, size, spacing and orientation ab 29 Typedef struct { int leftx, int width; } Char location; //Vị trí Typedef struct { CacheId; Heiglit; // Độ rộng chữ CharSpace; // Khoảng cách // ký tự Charlocation Table [128]; } fontcache Cấu trúc font chữ 30 Ký tự vector • Xây dựng theo phương pháp định nghĩa ký tự đường cong mềm bao ngồi chúng • Tốn mặt tính tốn • Chất lượng cao 31 So sánh • Đơn giản trơng việc sinh ký tự (copypixel) • Lưu trữ lớn • Các phép biến đổi (I,B, scale) địi hỏi lưu trữ thêm • Kích thước khơng đổi • Phức tạp (Tính tốn phương trình) • Lưu trữ gọn nhẹ • Các phép biến đổi dựa vào cơng thức biến đổi • Kích thước phụ thc vào mơi trường ( khơng có kích thước cố định) 32 ... đoạn thẳng a) Thuật toán DDA b) Giải thuật Bresenham c) Giải thuật trung điểm Biểu diễn đường trịn Biểu diễn đường ê-líp Giải thuật sinh ký tự - Rời rạc hóa điểm ảnh • Là tiến trình sinh đối tượng... dy - dx 17 BIỂU DIỄN ĐƯỜNG TRỊN VÀ ĐƯỜNG Ê-LÍP - Giải thuật trung điểm cho đường trịn • Sử dụng phương pháp biểu diễn không tường minh giải thuật x x 2 y y 2 r c c • Thực giải thuật. .. + 2yi - 2b + Pi = xD = x (d1 - d2) Gii thut Bresenham 10 Bắt đầu Pi = -2 yxi + 2xyi + c Pi+1 - Pi = -2 y(xi+1 - xi) + 2x(yi+1 - yi) x = x1 ; y = y1; dx = x2 - x1; dy = y2 - y1; P = dx - 2dy;