Bài giảng Đồ họa và hiện thực ảo - Lesson 3: Các giải thuật cơ sở
Tiến trình, giải thuật kiểm tra chấp nhận các đoạn thẳng nằm trong và loại bỏ các đoạn thẳng nằm ngoài dựa trên 2 điểm đầu cuối
Lý do:
Không kiểm tra mọi điểm trên đoạn thẳng
Hầu hết các đoạn thẳng với 1 màn hình hiển thị đều được chấp nhận hoặc loại bỏ
Rất ít các đợn thẳng cắt cửa sổ hiển thị
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Bạn đang xem tài liệu "Bài giảng Đồ họa và hiện thực ảo - Lesson 3: Các giải thuật cơ sở", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Đồ họa và hiện thực ảo - Lesson 3: Các giải thuật cơ sở
Khoa CNTT-DDHBK Hà nội Email: hunglt@it-hut.edu.vn 0913030731 1 1 Các giải thuật cơ sở Le Tan Hung hunglt@it-hut.edu.vn 0913030731Bài 3 2 Nội dung z Các giải thuật xén tỉa - Clipping z Các thuật toán tô miền kín z Phép xử lý Antialiasing 3 Xén tỉa - Clipping z Khái niệm Xén tỉa là tiến trình tự động xác định các điểm của 1 đối tượng nằm trong hay ngoài cửa sổ hiển thị z Tiết kiệm thời gian tiến trình rasterize bỏ qua phần nằm ngoài cửa sổ hiển thị z Clipping điểm xmin ≤ x ≤ xmax ymin ≤ y ≤ ymax xmin xmax ymax ymin 4 Clipping đoạn thẳng z Tiến trình, giải thuật kiểm tra chấp nhận các đoạn thẳng nằm trong và loại bỏ các đoạn thẳng nằm ngoài dựa trên 2 điểm đầu cuối z Lý do: z Không kiểm tra mọi điểm trên đoạn thẳng z Hầu hết các đoạn thẳng với 1 màn hình hiển thị đều được chấp nhận hoặc loại bỏ z Rất ít các đợn thẳng cắt cửa sổ hiển thị 5 Giải thuật Cohen Sutherland Outcode z Giải thuật Cohen-Sutherland thực hiện nhanh với các trương hợp đoạn thẳng nằm trong hay ngoài cửa sổ hiện thị z Mỗi điểm đầu cuối được gán mã code phụ thuộc vào vị trí trong mặt phẳng mã z p.code = 0000 z If p.x > P.code or 0001 z If p.y > P.code or 0100 z If p.x >= xmax >> P.code or 0010 z If p.y >= ymax >> P.code or 1000 6 z If P1.code OR P2.code == 0000 – Chấp nhận toàn đoạn thẳng z If P1.code AND P2.code != 0000 – Loại z Với truờng hợp cắt, giải thuật xác định lại điểm đầu cuối là giao của đoạn thẳng và khung bao của cửa sổ hiển thị Khoa CNTT-DDHBK Hà nội Email: hunglt@it-hut.edu.vn 0913030731 2 7 Liabarsky z x = x1 + (x2 - x1)u = x1 + uDx z y = y1 + (y2 - y1)u = y1 + uDy z xmin ≤ x1 + Dx.u ≤ xmax ⇔ x ∈ [xm, xM] z ymin ≤ y1 + Dy.u ≤ ymax ⇔ y ∈ [ym, yM] z Pk u ≤ qk k = 1, 2, 3, 4 ⎪⎪⎩ ⎪⎪⎨ ⎧ = −= = −= DyP DyP DxP DxP 4 3 2 1 ⎪⎪⎩ ⎪⎪⎨ ⎧ −= −= −= −= 14 13 12 11 yyq yyq xxq xxq M m M m 8 z Nếu Pk = 0 : điều đó tương đương với việc đoạn thẳng đang xét song song với cạnh thứ k của hình chữ nhật clipping. z a) Nếu qk < 0 ⇒ Đường thẳng nằm ngoài cửa sổ (hệ bất phương trình trên vô nghiệm) z b)Nếu qk >= 0 thì đoạn thẳng nằm trong hoặc nằm trên cạnh của cửa sổ clipping. z Hệ bất phương trình luôn thoả mãn. 9 z Nếu Pk ≠ 0 : đoạn thẳng đang xét sẽ cắt cạnh k tương ứng của cửa sổ clipping tại vị trí trên đoạn thẳng uk = qk/Pk. – Pk < 0 đoạn thẳng có dạng đi từ ngoài vào trong z bất phương trình sẽ có dạng u ≥ qk/Pk Ù u ≥ uk. – Pk > 0 z u ≥ uk sẽ thuộc cửa sổ hiển thị. z bất phương trình sẽ có dạng u ≤ qk/Pk z u ≤ uk với uk = qk/Pk là giao của đoạn thẳng với cạnh k của cửa sổ clipping z đoạn thẳng có dạng đi từ trong ra ngoài so với cạnh k. 10 z Pk < 0 và uk < 0 – cạnh k của cửa sổ clipping cắt đoạn thẳng tại phần mở rộng nằm ngoài đoạn thẳng. – uk ≤ u< 0 thoả mãn bất phương trình sẽ không nằm trên đoạn thẳng cần xét. – => uk sẽ nhận là 0 khi uk<0 z Pk > 0 và uk > 1 – => uk tương ứng sẽ nhận giá trị 1. z điểm nằm trong cửa sổ clipping sẽ có dạng như sau: – U1 ≤ u ≤ U2 11 { } ⎟⎟⎠ ⎞ ⎜⎜⎝ ⎛ ⎭⎬ ⎫ ⎩⎨ ⎧ <=∪= 0,:0max1 k k k kk PP quuU { } ⎟⎟⎠ ⎞ ⎜⎜⎝ ⎛ ⎭⎬ ⎫ ⎩⎨ ⎧ >=∪= 0,:1min2 k k k kk PP quuU 12 Sutherland-Hodgman Clipping z Basic idea: – Consider each edge of the viewport individually – Clip the polygon against the edge equation – After doing all planes, the polygon is fully clipped Khoa CNTT-DDHBK Hà nội Email: hunglt@it-hut.edu.vn 0913030731 3 13 Sutherland-Hodgman Clipping z Input/output for algorithm: – Input: list of polygon vertices in order – Output: list of clipped poygon vertices consisting of old vertices (maybe) and new vertices (maybe) z Note: this is exactly what we expect from the clipping operation against each edge 14 Sutherland-Hodgman Clipping z Sutherland-Hodgman basic routine: – Go around polygon one vertex at a time – Current vertex has position p – Previous vertex had position s, and it has been added to the output if appropriate 15 Sutherland-Hodgman Clipping z Edge from s to p takes one of four cases: (Purple line can be a line or a plane) inside outside s p p output inside outside s p no output inside outside s p i output inside outside sp i output p output 16 Sutherland-Hodgman Clipping z Four cases: – s inside plane and p inside plane z Add p to output z Note: s has already been added – s inside plane and p outside plane z Find intersection point i z Add i to output – s outside plane and p outside plane z Add nothing – s outside plane and p inside plane z Find intersection point i z Add i to output, followed by p 17 Giải thuật Cyrus-Beck Liang Barsky z Giải Cohen-Sutherland yêu cầu cửa sổ là hình chữ nhật, các cạnh là cạnh của màn hình z Vấn đề nảy sinh khi cửa sổ clip là 1 đa giác bất kỳ hoặc hình chữ nhật quay đi 1 góc z Giải thuật Liang-Barsky tối ưu khi tìm giao điểm của đoạn thẳng với cử sổ hiển thị z Nicholl-Lee-Nicholl reducing redundant boundary clipping by identifying edge and corner regions 18 3-D Clipping z Before actually drawing on the screen, we have to clip (Why?) z Can we transform to screen coordinates first, then clip in 2D? – Correctness: shouldn’t draw objects behind viewer (what will an object with negative z coordinates do in our perspective matrix?) (draw it) Khoa CNTT-DDHBK Hà nội Email: hunglt@it-hut.edu.vn 0913030731 4 19 Giải thuật đường biên (Boundary - File Algorithm) z Giải_thuật_đường_biên ( x, y ) Color : biến mầu Begin Color = Readpixel ( x, y ); If ( Color = mầu tô ) or ( Color = mầu đường biên ) Kết thúc vì chạm biên hoặc chạm phần đã tô Else Putcolor(x,y, mauto) Giải_thuật_đường_biên ( x+1, y ); Giải_thuật_đường_biên ( x-1, y ); Giải_thuật_đường_biên ( x, y+1 ); Giải_thuật_đường_biên ( x, y-1 ); // Thực hiện lại giải thuật với các điểm lân cận End. 20 Edge Walking z Basic idea: – Draw edges vertically – Fill
File đính kèm:
- bai_giang_do_hoa_va_hien_thuc_ao_lesson_2_cac_giai_thuat_co.pdf