Bài giảng Đồ họa máy tính - Chương 3: Thuật toán cắt xén, tô màu, phông chữ - Trần Thị Minh Hoàn

pdf 29 trang Gia Huy 16/05/2022 9210
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính - Chương 3: Thuật toán cắt xén, tô màu, phông chữ - Trần Thị Minh Hoàn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_do_hoa_may_tinh_chuong_3_thuat_toan_cat_xen_to_mau.pdf

Nội dung text: Bài giảng Đồ họa máy tính - Chương 3: Thuật toán cắt xén, tô màu, phông chữ - Trần Thị Minh Hoàn

  1. Chương 3: Thuật toán cắt xén, tô màu, phông chữ
  2. Quy trình hiển thị đối tượng 2D Phép biến đổi hệ quan sát với cửa sổ và vùng quan sát có dạng là các hình chữ nhật 2
  3. I. Các thuật toán cắt xén  Cắt xén với cửa sổ hình chữ nhật  Điểm ảnh  Cắt xén đoạn thẳng  Cắt xén đa giác 3
  4. Thuật toán cắt xén đoạn thẳng  Các giải pháp: 4
  5.  Kiểm tra từng pixel của đoạn thẳng có ở trong chữ nhật?  Tính toán các điểm cắt của từng đoạn thẳng với cạnh chữ nhật cắt xén  Thuật toán Sutherland-Cohen: loại bỏ các đoạn không cần cắt xén bằng xét tọa độ đầu mút các đoạn thẳng -> đơn giản và hiệu quả. 5
  6. Thuật toán Sutherland-Cohen  Mã hóa đầu mút các đoạn thẳng  Xác định nhanh đoạn thẳng có cần cắt xén hay không nhờ các phép toán logíc AND và OR bit 1 - left bit 2 - right bit 3 - below bit 4 - above Endpoint codes OR AND Meaning 0000 0000 0000 0000 No clipping (1) 0001 0001 0001 0001 No clipping (2) 1001 0001 1001 0001 No clipping (3) 1001 0100 1101 0000 Partly visible (4) 6
  7. Thuật toán Sutherland-Cohen  Kết quả phép OR hai mã đầu mút đoạn thẳng cho kết quả 0: cả hai điểm nằm trong chữ nhật  Kết quả phép AND hai mã đầu mút đoạn thẳng cho kết quả khác 0: cả hai điểm nằm ngoài chữ nhật  Cắt xén:  Giao của đoạn thẳng với các cạnh chữ nhật song song trục tung  x có giá trị Xmin, Xmax và hệ số góc a= (y2-y1)/(x2-x1) y=y + a(x - x ) 1 1 (x2, y2) (Xmin,Ymin)  Giao đoạn thẳng với các cạnh song song trục hoành  y có giá trị Ymin, Ymax và hệ số góc (X ,Y ) max max x=x + (y - y )/a 1 1 (x1, y1) 7
  8. Mã hóa hai đầu đoạn thẳng AB, với A (3,2) và B(-4,1), tọa độ cửa sổ cắt xén có góc dưới trái (-3,-2) và góc trên phải (2,3). Xác định đoạn thẳng nằm trong csht. 8
  9. Thuật toán cắt xén vùng  Input:  Chữ nhật cắt xén  Vùng là đa giác được xác định bởi trật tự các cặp tọa độ  Output:  Các đa giác nằm trong cửa sổ cắt xén  Ý tưởng thuật toán  So sánh lần lượt các đỉnh đa giác với biên cửa sổ  đỉnh nằm ngoài, loại bỏ ngay  đỉnh nằm trong, lưu trữ lại làm kết quả  tính giao điểm của các cạnh đa giác vùng với cạnh chữ nhật 9
  10. Thuật toán cắt xén vùng  Duyệt lần lượt (td. theo chiều kim đồng hồ) các cạnh đa giác  Nếu đỉnh duyệt xuất phát từ trong cửa sổ theo cạnh đa giác đi ra ngoài cửa sổ: lưu trữ giao của cạnh đa giác với biên cửa sổ  Nếu đường đi từ ngoài vào trong cửa sổ: lưu trữ đỉnh đa giác và giao điểm  Thí dụ xét hai đỉnh đa giác S và P: S S P I P S P I P S a) Lưu P b) Lưu I c) Không d) Lưu I, P lưu gì 10
  11. II. Tô màu một vùng  Đặt vấn đề  Cho trước đa giác trong không gian 2D, hãy tô đa giác theo màu xác định trên màn hình đồ họa  Giả thiết  Đa giác đơn, không tự cắt  Giải pháp  Tô màu tràn  Tô màu theo đường quét 11
  12. 1. Thuật toán tô màu tràn  Input:  Cho trước đa giác P có n đỉnh v0 đến vn-1 (vn trùng `với v0)  Màu tô đa giác: C  Tọa độ điểm xuất phát tô: p = (x, y) P (là điểm bên trong đa giác P)  Thuật toán FloodFill (Polygon P, int x, int y, Color C) if not (OnBoundary (x, y, P) and Colored (x, y, C)) Begin PlotPixel (x, y, C); FloodFill (P, x+1, y, C); FloodFill (P, x, y+1, C); FloodFill (P, x-1, y, C); FloodFill (P, x, y-1, C); End; 12
  13. 2. Thuật toán tô màu theo đường quét  Ý tưởng: Sử dụng giao điểm giữa các biên đa giác và đường quét để nhận ra pixel có trong đa giác? 1 4 scan line 1 2,3 scan line 2 1 2,3 4 5  Thuật toán:  Cho trước đa giác P với n đỉnh v0 đến vn-1 (vn trùng với v0)  Cho trước C là màu tô đa giác  Giao của mỗi đường quét với các cạnh đa giác thì sẽ là điểm vào hay điểm ra đa giác  Tìm ra các đoạn thẳng nằm trong đa giác để vẽ theo màu C 13
  14. Thuật toán tô màu theo đường quét ScanConvert( Polygon P, Color C) Begin For y:=ymin To yMax Do Begin I <= Các giao điểm của cạnh đa giác P với đường Y = y; Sắp xếp I: X tăng dần và Vẽ đoạn thẳng cách quãng theo màu C; End; End; 14
  15. Thuật toán tô màu theo đường quét  Tối ưu chuyển đổi đường quét  Sử dụng đồng thời thuật toán Bresenham hay thuật toán trung điểm vẽ đoạn thẳng  Các trường hợp đặc biệt 15
  16. So sánh các thuật toán tô màu Flood Fill Scan Conversion Đơn giản Phức tạp hơn Thuật toán rời rạc hóa trong không Thuật toán rời rạc hóa trong đối gian màn hình tượng hoặc/và không gian màn hình Yêu cầu gọi hệ thống GetPixel/Val Độc lập với thiết bị Đòi hỏi điểm seed Không đòi hỏi điểm seed Yêu cầu stack rất lớn Yêu cầu stack nhỏ 16
  17. III. Phông chữ  Một vài khái niệm về phông chữ  Phông bitmap (raster)  Phông véctơ  Phông True Type 17
  18. 1. Các khái niệm cơ sở  Phông chữ được Guttenberg thiết kế. Được sử dụng từ nhiều thế kỷ. Ngày nay rất phong phú.  Phông là tập đầy đủ các ký tự có chung kiểu dáng (style)  Weight (Độ dày): light, normal, bold  Shape (Hình dạng): round, oval, straight  Posture (Dáng chữ): Oblique, Italic  Serif, sans-serif  Font family  Có face name (thí dụ Times Bold, Times Italic) cho biết weight và posture (không cho biết size) 18
  19. Các loại phông  Công nghiệp máy tính sử dụng 3 loại phông  Phông bitmap (raster)  Phông véctơ  Phông TrueType 19
  20. 2. Raster fonts  Là loại phông đầu tiên của màn hình máy tính  Ngày nay vẫn đang sử dụng  Ban đầu font bitmap được nhúng trong các vỉ điều khiển màn hình, máy in  Ánh xạ bố trí pixels của mỗi ký tự lên màn hình  Mỗi bit trong bitmap sẽ bật sáng điểm ảnh trên CRT Offset Hex value Binary value 0 00h 00000000 1 3Ch 00111100 2 18h 00011000 3 18h 00011000 4 18h 00011000 5 18h 00011000 6 3Ch 00111100 7 00h 00000000 20
  21. Raster fonts  Có độ rộng và độ cao cố định  Lưu trữ: tách biệt các ảnh phông. Vị trí byte thứ nhất của khối bitmap trong bộ font: Offset = (ASCII code) * (Bytes per character)  Ưu điểm  Hiển thị nhanh  Dễ tạo lập và dễ sửa đổi  Nhược điểm  Vấn đề co dãn  Dung lượng lưu trữ lớn 21
  22. Ví dụ GLubyte rasters[24] = {0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0}; 22
  23. Cú pháp lệnh glBitmap: void glBitmap(GLsizei width, GLsizei height, GLfloat xbo, GLfloat ybo, GLfloat xbi,GLfloat ybi, const GLubyte *bitmap); glBitmap (10, 12, 0.0, 0.0, 11.0, 0.0, rasters); 23
  24. glRasterPos2i(20, 20); void glRasterPos{234}{sifd}v(TYPE *coords); Thiết lập vị trí điểm hiện tại. Các đối số x,y,z,w chỉ ra tọa độ của vị trí điểm. Nếu dạng vectơ của hàm được sử dụng, các mảng tọa độ chứa các tọa độ của vị trí điểm. Nếu glRasterPos2*() được sử dụng, z được ngầm định là 0 và w được ngầm định là 1; tượng tự với glRasterPos3*(), w được đặt là 1. 24
  25. 3. Vector fonts  Không sử dụng Bitmap để mô tả ký tự  Sử dụng ngôn ngữ mô tả nào đó  Ngôn ngữ mô tả bao gồm các lệnh như Line, Curve, Polygon  Tọa độ: tương đối trong chữ nhật chứa ký tự  Chương trình con xử lý các lệnh để hiển thị  Ưu điểm  Dễ co giãn, có tính propotional, trơn tru, dễ tạo lập hiệu ứng đặc biệt: xoay, gập, cong  Nhược điểm:  Khi hiển thị font nhỏ: chậm hơn bitmap font.  Vấn đề hiển thị font nét chữ dày. 25
  26. 4. True Type fonts  True Type là công nghệ font của Apple Computer Inc. (1987); Tác giả: Kathryn Weisberg, Sampo Kaasila  MS bắt đầu sử dụng True Type vào đầu 1992 trên Windows 3.1  Công nghệ True Type bao gồm:  Các tệp chứa True Type Fonts (TTF)  Bộ raster hóa True Type của hệ điều hành (MacOS, Windows ) trước khi hiển thị, in trên giấy.  OpenType: 5-1996 MS và Adobe System kết hợp công nghệ True Type với PostScript. 26
  27. True Type fonts  Sử dụng các đường thẳng và các đường cong nội suy spline và Bezier để vẽ các ký tự  Tệp TTF chứa  Mô tả hình dạng ký tự  Các thông tin khác: tên font, bản quyền, hãng sản xuất  MS chọn font True Type là font chính trong hệ điều hành Windows 27
  28. True Type fonts  MS Windows sử dụng TTF?  Nạp font từ tệp  Trình Scaler:  Co dãn đường viền đến kích thước yêu cầu theo mật độ cho trước trên thiết bị ra.  Trình Interpreter:  Biến đổi đường cong để hình thành đường viền đã hiệu chỉnh.  Trình Scan-converter:  Tô trong đường viền đã hiệu chỉnh bằng các pixel để tạo bitmap cho chữ đặc.  Hiển thị / in các bitmap ký tự. 28
  29. Thực hành 29