Bài giảng Chương 10: Các giải thuật nâng cao

40 12 0
Bài giảng Chương 10: Các giải thuật nâng cao

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Chương 10: Các giải thuật nâng cao trình bày về Frame buffer và thiết bị hiển thị; truy cập vào frame buffer; giải thuật DD_Line; thuật toán Bresenham; biểu diễn đoạn thẳng trong frame buffer; quy tắc chọn pixel xấp xỉ tốt đoạn thẳng thực và một số nội dung khác.

Chương 10: Các giải thuật nâng cao Scan conversion ª ª Scan conversion: trình biểu diễn đối tượng hình học (đoạn thẳng, vịng trịn, ) đệm ảnh đơn (frame buffer) hệ thống đồ họa quét raster vận hành (drive) the frame buffer thông qua thủ tục – SetPixel(⋅ ) – GetPixel(⋅ ) Frame buffer thiết bị hiển thị ª Mơ hình chức frame buffer C y B R làm tươi ảnh x • B=1 •(value=0) => (pixel off) black •(value=1) => (pixel on) white Màn hình Truy cập vào frame buffer ª Mơ hình lập trình – Mơ hình cho frame buffer – Các thao tác lên frame buffer const {moät ví dụ} MaxColumn = 639; {= C - 1} MaxRow MaxRow = 479; {= R - 1} MaxColor = 255; {= số màu - 1} type col = MaxColumn; row = MaxRow; MaxColumn color = MaxColor; procedure SetPixel(c : col, r : row, value : color); {load frame buffer} function GetPixel(c : col, r : row) : color; {read frame buffer} procedure SetPixelWord(c : col, r : row, value : word); function GetPixel(c : col, r : row) : word; Thuật tốn vẽ đoạn thẳng ª u cầu – – – – – Đi qua điểm đầu mút đoạn thẳng Độ sáng đồng đều, trơn Đường thẳng có độ dốc khác phải có độ sáng Giải thuật phải có tính lặp lại (dùng để xóa đường thẳng) Không phụ thuộc vào chọn điểm bắt đầu vẽ Giải thuật DD_Line ª Procedure DD_Line(row1,col1,row2,col2,color:integer); {Giả sử độ dốc nằm [-1,1], col1< bound_color) and (GetPixel(x, y) >< new_color) begin SetPixel(x, y, new_color); FloodFill(x – 1, y, int_color, new_color); FloodFill(x + 1, y, int_color, new_color); FloodFill(x, y + 1, int_color, new_color); FloodFill(x, y – 1, int_color, new_color); end end; ª Run of Pixels ª ª Giả thiết pixel 4-connected Giải thuật Push address of seed pixel on the stack; while stack not empty Pop the stack to provide the next seed; Fill in the run defined by the seed; Examine the row above for runs reachable from this run; Push the address of the rightmost pixels of each such run; Do the same for the row below the current run; end; Ví dụ Ví dụ D C Ví dụ J I G F C Tơ màu vùng đa giác ª Xét dịng ngang đệm hình: – Tìm giao điểm dịng với tất cạnh đa giác – Sắp xếp giao điểm theo chiều tăng dần giá trị x – Tô điểm ảnh nằm cặp giao điểm Tô màu vùng đa giác ª ª Cạnh nằm ngang khơng cần phải xử lý Tính chẵn lẻ khơng cịn điểm mút cực trị địa phương – Cách giải quyết: dịch điểm đầu mút cạnh xuống pixel Tơ màu vùng đa giác ª Active Edge List (AEL) lợi dụng tính lân cận cạnh – cạnh cắt scanline y cắt scanline y+1 – giá trị x giao điểm cĩ thể dự đốn trước ª type edge_ptr = ^edge_info edge_info = record y_upper : row; x_int : real; recip_slope : real; next : egde_ptr; end; Tô màu vùng đa giác ª update AEL cho scanline y+1 – xĩa tất cạnh cĩ y_upper < new_y – thay đổi x_value cách cộng thêm recip_slope – cĩ thể thêm vào cạnh cĩ y_lower = new_y – thứ tự giao điểm cĩ thể bị xáo trộn, nên phải xếp lại Tơ màu vùng đa giác ª Xây dựng bảng cạnh: edge_table: array [row] of edge_ptr ... Round(y),color); y:= y + m; end; end; Thuật tốn Bresenham ª Những hạn chế giải thuật DD_Line – Chậm sử dụng hàm Round – Khơng xác khoảng cách điểm đầu mút lớn – Độ sáng không đồng ª Thuật toán Bresenham – Chỉ... ei + = ei + 2Dy – khơng chọn yi = yi - + ei + = ei + 2Dy - 2Dx Giải thuật Bresenham ª Biểu diễn đoạn thẳng frame buffer – Giải thuật bắt đầu nào? ª x0 = xa, y0 = ya ª Từ (*) có e1 = 2(Dy) - Dx... begin y := y + 1; e := e + e_inc end; end; end; {Bresenham} Các trường hợp khác ª ª ª ª ª Giải thuật Bresenham giả sử xa > xb < m < Giải trường hợp lại: xa > xb (đổi vị trí hai đầu mút) m > (đổi

Ngày đăng: 09/05/2021, 14:45

Mục lục

  • Chương 10: Các giải thuật nâng cao

  • Scan conversion

  • Frame buffer và thiết bị hiển thị

  • Truy cập vào frame buffer

  • Thuật toán vẽ đoạn thẳng

  • Giải thuật DD_Line

  • Thuật toán Bresenham

  • Biểu diễn đoạn thẳng trong frame buffer

  • Sai số khi chọn pixel

  • Quy tắc chọn pixel xấp xỉ tốt đoạn thẳng thực

  • Kiểm tra tính đúng đắn của quy tắc chọn pixel

  • Kiểm tra tính đúng đắn của quy tắc chọn pixel (tiếp)

  • Tính sai số một cách hữu hiệu

  • Giải thuật của Bresenham

  • Giải thuật của Bresenham (tiếp)

  • Các trường hợp khác

  • Biểu diễn vòng tròn trong frame buffer

  • Đối xứng trên vòng tròn

  • Slide 19

  • Qui tắc chọn pixel xấp xỉ tốt cung vòng tròn

Tài liệu cùng người dùng

Tài liệu liên quan