Giáo trình kỹ thuật đồ họa - Chương 7 ppt

24 361 0
Giáo trình kỹ thuật đồ họa - Chương 7 ppt

Đ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

Chương 7: Khử mặt kuất đường khuất Chương KHỬ CÁC MẶT KHUẤT VÀ ĐƯỜNG KHUẤT 7.1 Tổng quan • Mục tiêu Học xong chương sinh viên cần phải nắm bắt vấn đề sau: - Việc tạo hình ảnh thực xác định xóa bỏ phần ảnh mà ta khơng nhìn thấy từ vị trí quan sát - Nắm vững tiếp cận khử mặt khuất đường khuất • Kiến thức Kiến thức tốn học : kiến thức cách vẽ hình hình học khơng gian Kiến thức tin học : kỹ thuật lập trình cấu trúc liệu • Tài liệu tham khảo Computer Graphics Donald Hearn, M Pauline Baker Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 (chapters 13, 260-284) • Nội dung cốt lõi Các tiếp cận khử mặt khuất, đường khuất bao gồm : - Phương pháp dùng vùng đệm độ sâu - Phương pháp đường quét - Phương pháp xếp theo độ sâu - Phương pháp phân chia vùng Trang 134 Chương 7: Khử mặt kuất đường khuất 7.2 Khử mặt nằm sau (Back-Face Removal) Một vấn đề lớn cần quan tâm đến việc tạo hình ảnh thực xác định xóa bỏ phần ảnh mà ta khơng nhìn thấy từ vị trí quan sát Có nhiều tiếp cận cần để giải vấn đề này, có nhiều thuật tốn khác phát triển để xóa bỏ phần bị che khuất cách hiệu cho loại ứng dụng khác Vài phương pháp đòi hỏi nhiều nhớ hơn, vài cần nhiều thời gian xử lý hơn, số khác lại áp dụng cho kiểu đối tượng đặc biệt Phương pháp chọn cho ứng dụng cụ thể dựa vào nhân tố độ phức tạp ảnh, kiểu đối tượng hiển thị, thiết bị có, hình ảnh cần hiển thị tĩnh hay động Trong chương này, khảo sát tỉ mỉ vài số phương pháp dùng biến để xóa bỏ đường khuất mặt khuất Phân loại thuật toán Các thuật toán đường khuất mặt khuất thường phân loại dựa theo chúng dùng để xử lý trực tiếp định nghĩa đối tượng hay xử lý hình chiếu đối tượng Hai tiếp cận gọi phương pháp không gian đối tượng (object-space) phương pháp không gian ảnh (image-space) Phương pháp không gian đối tượng so sánh đối tượng, thành chúng với khác để xác định xem mặt đường đánh nhãn khơng nhìn thấy Trong thuật tốn khơng gian ảnh, tính chất nhìn thấy điểm định điểm vị trí pixel mặt phẳng chiếu Hầu hết thuật toán khử mặt khuất dùng phương pháp không gian ảnh, nhiên phương pháp khơng gian đối tượng dùng cách hiệu cho số trường hợp Các thuật toán khử đường khuất hầu hết dùng phương pháp khơng gian đối tượng, nhiều thuật tốn khử mặt khuất khơng gian ảnh dễ dàng chỉnh sửa cho việc khử đường khuất Dù có có khác lớn tiếp cận cần thuật toán khử mặt khuất đường khuất, hầu hết chúng dùng đến phương pháp xếp (sorting) cố kết (coherence) để cải thiện thực Sắp xếp mang đến dễ dàng cho việc so sánh độ sâu sau này, điều thực cách xếp Trang 135 Chương 7: Khử mặt kuất đường khuất thứ tự đường, mặt, đối tượng ảnh dựa vào khoảng cách từ chúng đến mặt phẳng quan sát Phương pháp cố kết dùng để thu thuận lợi cân đối ảnh Một đường quét riêng lẻ dùng để chứa đựng giá trị độ sáng pixel, mẫu đường quét (scan-line patterns) thường thay đổi từ đường đến đường Các khung nối kết động chứa thay đổi vùng lân cận đối tượng di chuyển Và mối quan hệ cố định thường xây dựng đối tượng mặt ảnh Một phương pháp không gian đối tượng đơn giản để xác định mặt sau (back faces ) đối tượng dựa vào phương trình mặt: Ax + By + Cz + D = (7-1) Bất kỳ điểm (x’, y’, z’) hệ tọa độ bàn tay trái “phía trong” mặt thỏa bất phương trình: Ax’ + By’ + Cz’ + D < (7-2) Nếu điểm (x’, y’, z’) vị trí quan sát (viewing position), mặt phẳng làm cho bất phương trình 7-2 phải mặt đằng sau Tức là, mặt ta khơng thể nhìn thấy từ vị trí quan sát Chúng ta thực cách kiểm Hình 7-1 Một mặt phẳng với tham số C < hệ quan sát bàn tay phải xác định mặt đằng sau hướng quan sát chiều với trục zv âm yv tra mặt đằng sau đơn giản cách nhìn N= (A, B, C) pháp vector (normal vector) mặt phương có trình Hướng quan sát xv • Điểm quan sát zv 7-1 Pháp vector có tọa độ Descartes (A, B, C) Trong hệ tọa độ bàn tay phải với hướng quan sát chiều với trục zv âm (xem hình 7-1), pháp vector có tham số C song song với hướng quan sát Nếu C0 hướng quan sát hướng với trục zv dương (xem hình 7-2) Trong tất thảo luận sau chương, giả sử hệ quan sát bàn tay trái dùng yv Hình 7-2 Trong hệ quan sát bàn tay trái, hướng quan sát chiều với trục zv dương, mặt đằng sau mặt với tham số C>0 N= (A, B, C) Hướng quan sát xv zv • Điểm quan sát Bằng việc kiểm tra tham số C mặt đối tượng, ta xác định tất mặt đằng sau Đối với khối đa diện lồi đơn lẽ, Hình 7-3 Ảnh đối tượng với mặt bị che khuất phần hình kim tự tháp hình 7-1, việc kiểm tra xác định tất mặt bị che khuất đối tượng, mặt hồn tồn nhìn thấy hoàn toàn bị che khuất Đối với đối tượng khác, kiểm tra phức tạp cần thực để xác định xem mặt bị che khuất hoàn toàn hay bị che khuất phần (xem hình 7-3) Tương tự, cần xác định xem đối tượng có phần hay toàn bị che khuất đối tượng khác Một cách tổng quát, việc khử mặt khuất loại bỏ khoảng số mặt ảnh thực phép kiểm tra tính nhìn thấy sau Trang 137 Chương 7: Khử mặt kuất đường khuất 7.3 Phương pháp dùng vùng đệm độ sâu (Depth-Buffer Method) Một tiếp cận không gian ảnh dùng phổ biến để khử mặt khuất phương pháp vùng đệm độ sâu, gọi phương pháp z-buffer Một cách bản, thuật toán kiểm tra tính nhìn thấy mặt lần điểm Với vị trí pixel (x,y) mặt phẳng quan sát, mặt có giá trị tọa độ z nhỏ vị trí pixel nhìn thấy Hình 7-4 trình bày ba mặt có độ sâu khác nhau, với quan tâm đến vị trí (x, y) hệ quan sát bàn tay trái Mặt S1 có giá trị z nhỏ vị trí giá trị độ sáng (x, y) lưu Hai vùng đệm cần để cài đặt phương pháp Một vùng đệm độ sâu (depth buffer) dùng để lưu trữ giá trị z cho vị trí (x, y) mặt so sánh Vùng đệm thứ hai vùng đệm làm tươi (refresh buffer) (hay gọi vùng đệm khung), lưu giữ giá trị độ sáng cho vị trí (x, y) Phương pháp thực hiệu hệ tọa độ chuẩn, với giá trị độ sâu thay đổi từ đến Giả sử không gian chiếu (projection volume) ánh xạ vào khơng gian quan sát hình hộp chuẩn, ánh xạ mặt lên mặt phẳng quan sát phép chiếu trực giao Độ sâu điểm bề mặt đa giác tính từ phương trình mặt phẳng Ban đầu, tất vị trí vùng đệm độ sâu đặt giá trị (độ sâu lớn nhất), vùng đệm làm tươi khởi tạo giá trị độ sáng Mỗi mặt (đã lập danh sách bảng đa giác (polygon tables)) sau xử lý Mỗi lần đường quét (scane line), tính độ sâu, giá trị z, vị trí (x, y) Giá trị z vừa tính xong so sánh với giá trị lưu trữ trước vùng S3 đệm độ sâu vị trí Nếu giá trị z vừa tính xong nhỏ giá trị trước đó, giá trị z lưu, độ sáng mặt vị trí • zv yv S2 • S1 xv • • cập nhật lại vào vị trí tương ứng vùng đệm làm tươi Hình 7-4 Ở ví trí (x, y), mặt S1 có giá độ sâu nhỏ nhìn thấy ví trí Trang 138 Chương 7: Khử mặt kuất đường khuất Chúng ta tổng kết bước thuật tốn vùng đệm độ sâu sau: Khởi tạo vùng đệm độ sâu vùng đệm làm tươi để với tất vị trí (x,y), depth(x, y) =1 refresh(x, y) = background Đối với vị trí mặt, so sánh giá trị độ sâu với giá trị độ sâu lưu trước vùng đệm độ sâu để xác định tính chất nhìn thấy a Tính giá trị z cho vị trí (x, y) mặt b Nếu z < depth(x, y) đặt lại depth(x, y)= z refresh(x, y) = i , với i giá trị độ sáng mặt vị trí (x, y) Trong bước cuối cùng, z không nhỏ giá trị vùng đệm độ sâu vị trí đó, điểm khơng nhìn thấy Khi q trình hồn thành cho tất mặt, vùng đệm độ sâu chứa giá trị z mặt nhìn thấy vùng đệm làm tươi chứa giá trị độ sáng mặt nhìn thấy Các giá trị độ sâu cho vị trí (x, y) tính từ phương trình mặt: z= − Ax − By − D C (7-3) Với đường quét (xem hình 7-5), tọa độ x đường quét sai khác 1, giá trị y hai đường quét sai khác Nếu độ sâu vị trí (x,y) xác định z, độ sâu z’ vị trí (x+1, y) dọc theo theo đường qt có từ phương trình 13-3 sau: z' = − A( x + 1) − By − D C Hình 7-5 Từ vị trí (x, y) đường qt, vị trí qua phải có tọa độ (x+1, y), vị trí liền bên dịng có tọa độ (x, y-1) z' = z − A C y (7-4) y y-1 • • • x x+1 x Trang 139 Chương 7: Khử mặt kuất đường khuất Tỷ số A/C khơng đổi với mặt, giá trị độ điểm đường quét có từ giá trị trước với phép trừ Chúng ta thu giá trị độ sâu đường quét theo cách tương tự Một lần giả sử vị trí (x, y) có độ sâu z Khi vị trí (x, y-1) đường qt bên dưới, giá trị độ sâu tính từ phương trình mặt phẳng sau: z' ' = − Ax − B( y − 1) − D C (7-5) z' ' = z + B C cần phép cộng B/C với giá trị độ sâu z trước Phương pháp vùng đệm độ sâu dễ dàng để cài đặt, khơng cần xếp mặt ảnh Nhưng cần đến vùng đệm thứ hai vùng đệm làm tươi Một hệ thống với độ phân giải 1024 x 1024 cần triệu vị trí vùng đệm độ sâu, với vị trí cần đủ bit để lưu giữ tọa độ z tăng Một cách để giảm bớt không gian lưu giữ cần thiết thời điểm xử phần ảnh, dùng vùng độ sâu nhỏ Sau phần ảnh xử lý xong, vùng đệm dùng lại cho phần 7.4 Phương pháp đường quét (Scan-Line Method) Phương pháp không gian ảnh để khử mặt bị che khuất mở rộng thuật tốn scan-line để tơ phần bên đa giác Thay tơ mặt, xử lý với nhiều mặt Khi đường quét xử lý, tất mặt đa giác cắt đường quét kiểm tra để xác định xem mặt nhìn thấy Ở vị trí đường qt tính tốn độ sâu thực cho mặt để xác định mặt gần mặt phẳng quan sát Khi mặt mặt nhìn thấy được xác định, giá trị độ sáng cho vị trí nhập vào vùng đệm làm tươi (refresh buffer) Một đa giác không gian ba chiều cài đặt bao gồm hai bảng: bảng cạnh (edge table) bảng đa giác (polygon table), tương tự hình 723 cuối chương Bảng cạnh (edge table) chứa tọa độ đỉnh đầu mút cạnh, đảo hệ số góc đường thẳng qua cạnh, diểm (pointer) đến Trang 140 Chương 7: Khử mặt kuất đường khuất bảng đa giác để xác định mặt chứa cạnh Bảng đa giác chứa hệ số phương trình mặt, thơng tin độ sáng cho mặt, đến bảng cạnh Để dễ dàng nghiên cứu mặt cắt đường quét cho, cài đặt danh sách động chứa cạnh lấy thông tin bảng cạnh Danh sách động chứa cạnh cắt đường quét hành, xếp theo thứ thự x tăng Và, định nghĩa cờ (flag) cho mặt, cờ đặt on hay off để vị trí nằm dọc đường quét nằm hay nằm mặt Các đường quét xử lý từ trái sang phải Ở biên bên trái mặt, cờ mặt on; biên bên phải cờ off Hình 7-6 minh họa phương pháp scan-line để xác định vị trí phần nhìn thấy dọc theo đường quét Danh sách động cho đường quét (scan line 1) lấy thông tin từ bảng cạnh cạnh AB, BC, HE, FG Đối với vị trí dọc theo đường quét cạnh AB BC, cờ mặt S1 on Do đó, khơng phép tính độ sâu cần thiết, thông tin độ sáng mặt S1 lấy từ bảng đa giác để nhập vào vùng làm tươi Tương tự, cạnh HE FG, cờ cho mặt S2 on Không vị trí khác dọc theo đường quét cắt mặt, giá trị độ sáng vùng khác đặt độ sáng nền.Độ sáng nạp vào vùng đệm thủ tục khởi tạo Hình 7-6 Các đường quét cắt hình chiếu hai mặt S1 S2 mặt phẳng chiếu Các đường nét đứt biên mặt bị che khuất yv B E F Đường quét A S1 H S2 Đường quét Đường quét C D G xv Danh sách động cho đường quét hình 7-6 chứa cạnh DA, HE, BC, FG Dọc theo đường quét từ cạnh DA đến cạnh EH, cờ mặt S1 on Trang 141 Chương 7: Khử mặt kuất đường khuất Nhưng HE BC, cờ cho hai mặt on Trong đoạn này, tính tốn độ độ sâu phải thực cách dùng tham số mặt mặt Trong ví dụ này, độ sâu mặt S1 được giả thiết nhỏ mặt S2, độ sáng mặt S1 nạp vào vùng đệm làm tươi đến biên BC gặp Sau cờ mặt S1 trở thành off, độ sáng mặt S2 lưu cạnh FG qua Chúng ta tận dụng thuận lợi có từ quan hệ cố kết dọc theo đường quét từ đường đến đường Trong hình 7-6, đường qt có danh sách động giống dịng Bởi khơng có thay đổi xảy giao điểm đường, ta không cần tính lại độ sâu cạnh HE BC Hai mặt phải có hướng tương tự xác định đường quét 2, độ sáng cho mặt S1 khơng cần nhập lại Dù có mặt xếp chồng lên nhau, ta dùng phương pháp scan-line Các cờ cho mặt đặt để rõ xem vị trí bên hay bên ngồi, tính tốn độ sâu thực mặt xếp chồng lên Trong vài trường hợp, mặt che khuất cách luân phiên (xem hình 7-7) Khi phương pháp cố kết dùng, ta cần cẩn thận để lưu vết phần mặt thấy đường quét Một cách để xử lý trường hợp phân chia mặt Cụ thể, mặt ABC hình 7-8 chia làm ba mặt ABED, DEGF, CFG Mỗi mặt nhỏ xét mặt riêng biệt, khơng có hai mặt bị che khuất nhìn thấy cách luân phiên Đường cắt Hình 7-7 Các ví dụ hướng mặt che khuất lẫn Đường cắt (a) (b) Trang 142 Chương 7: Khử mặt kuất đường khuất B A B A Hình 7-8 Chia mặt làm nhiều mặt để tránh vấn đề nhìn thấy khơng nhìn thấy luân phiên hai mặt D E G F C C (a) (b) 7.5 Phương pháp xếp theo độ sâu (Depth- Sorting Method) Ta sử dụng hai phương pháp không gian ảnh không gian đối tượng thuật toán khử mặt khuất Phương pháp xếp theo độ sâu (depthsorting method) nối kết hai tiếp cận trên, thực công việc sau: Các mặt theo thứ tự giảm dần độ sâu Các mặt vẽ theo thứ tự từ mặt có độ sâu lớn đến mặt có độ sâu nhỏ (vẽ từ mặt xa đến mặt gần nhất) Các thao tác xếp thực khơng gian đối tượng, cịn chuyển đổi dịng qt (scan conversion) thực khơng gian ảnh Phương pháp giải vấn đề mặt khuất zv đơi cịn gọi thuật tốn họa zmax sĩ (painter’s algorithm) Để tạo sơn dầu (oil painting), họa sĩ sơn độ S sáng Kế tiếp, đối tượng xa zmin Z’max thêm vào Sau cùng, đối tượng gần S’ vẽ phủ lên đối tượng xa Mỗi lớp vẽ Z’min xv Hình 7-9 Hai mặt khơng có nạp chồng độ sâu sau phủ lên lớp vẽ trước Dùng kỹ thuật tương tự, xếp mặt theo khoảng cách từ chúng đến mặt quan sát Các giá trị độ sáng mặt xa nhập vào vùng Trang 143 Chương 7: Khử mặt kuất đường khuất vùng đệm làm tươi Với mặt (xét theo thứ tự độ sâu giảm dần), ta “sơn” độ sáng mặt lên vùng đệm làm tươi (phủ lên độ sáng mặt xử lý trước đó) Việc sơn mặt đa giác lên vùng đệm làm tươi dựa theo độ sâu thực vài bước Đầu tiên, mặt xếp dựa vào giá trị z lớn mặt Mặt với độ sâu lớn (gọi S) sau so sánh với mặt cịn lại danh sách để xác định xem có chồng độ sâu không (nằm chồng lên nhau) Nếu khơng có chồng độ sâu xảy ra, S vẽ (vẽ theo đường qt) Trong hình 7-9 trình bày hai mặt khơng có chồng độ sâu (hai mặt khơng nằm chồng nhau), hình chiếu chúng lên mặt phẳng xz Xử lý sau lặp lại cho mặt danh sách Khi khơng có chồng độ sâu xảy ra, mặt xử lý theo thứ tự độ sâu tất quét qua Nếu có chồng độ sâu phát điểm danh sách, ta cần làm vài so sánh bổ sung để xác định xem mặt nên xếp lại Với mặt nằm chồng với S, ta thực phép kiểm tra sau Chỉ cần số phép kiểm tra (true), ta khơng cần lại vị trí mặt Các phép kiểm tra lập danh sách theo mức độ khó tăng dần: Trên mặt phẳng xy, hình chữ nhật zv bao quanh hai mặt không chồng lên Mặt S “phía ngồi” mặt nằm S’ chồng, so sánh dựa vào mặt phẳng S quan sát Mặt nằm chồng “phía ” mặt S, so sánh dựa vào mặt phẳng xmin xmax x’min x’max xv quan sát Các hình chiếu hai mặt lên mặt Hình 7-10 Hai mặt khơng có chồng độ sâu theo hướng x phẳng quan sát không nằm chồng lên Trang 144 Chương 7: Khử mặt kuất đường khuất Vừa phép kiểm tra phát cho mặt nằm chồng, ta biết mặt khơng nằm phía sau S Vì ta chuyển đến mặt chồng S Nếu tất mặt mặt nằm chồng vượt qua phép kiểm tra trên, ta khơng phải xếp S vẽ Phép kiểm tra thực hai phần: Chúng ta kiểm tra nằm chồng theo hướng x, sau kiểm tra nằm chồng theo hướng y Nếu hai hướng phát khơng có nằm chồng, hai mặt phẳng khơng che khuất Một ví dụ hai mặt có nằm chồng theo hướng z khơng chồng theo hướng x cho hình 7-10 Chúng ta thực phép kiểm tra cách tọa độ tất đỉnh S vào phương trình mặt mặt nằm chồng kiểm tra dấu kết Giả sử mặt nằm chồng có hệ số A’, B’, C’, D’ Nếu A’x + B’y + C’z + D’ > với đỉnh có tọa độ (x, y, z) S, mặt S “phía ngồi” mặt nằm chồng S’ (xem hình 711) Như đề cập trước đây, hệ số A’, B’, C’, D’ phải xác định trước để pháp vector mặt nằm chồng S’ xa khỏi mặt phẳng quan sát zv zv S S S’ S’ xv xv Hình 7-11 Mặt S hồn tồn “phía ngồi” mặt nằm chồng S’ nhìn từ mặt quan sát xy Hình 7-12 Mặt nằm chồng S’ hồn tồn “phía trong” mặt S, nhìn từ mặt quan sát xy Phép kiểm tra thực dùng hệ số A, B, C, D mặt S Nếu tọa độ (x, y, z) tất đỉnh mặt nằm chồng S’ thỏa điều kiện Ax + By + Cz + D < 0, mặt nằm chồng S’ “phía trong” mặt S (cung cấp pháp vector mặt S hướng xa mặt phẳng quang sát) Hình 7-12 trình bày mặt nằm chồng S’ thỏa phép kiểm tra Trong ví dụ này, mặt S khơng “phía ngồi” S’ (phép kiểm tra khơng đúng) Trang 145 Chương 7: Khử mặt kuất đường khuất Nếu tất phép kiểm tra từ đến thất bại (sai), thử đến phép kiểm tra cách kiểm tra cắt cạnh biên hai mặt, dùng phương trình đường thẳng mặt xy Như minh họa hình 7-13, hai mặt cắt khơng cắt chí khơng gian bao quanh chồng theo hướng x, y, z (xem hình 7-13) Hình 7-13 Hai mặt với biên chữ nhật nằm chồng mặt xy Các mặt không cắt Các mặt cắt Nếu tất bốn phép kiểm tra thất bại với mặt nằm chồng cụ thể S’, ta đổi chỗ hai mặt S S’ cho danh sách Một ví dụ hai mặt xếp lại với thủ tục cho hình 7-14 Tuy nhiên, ta ta tìm gặp mặt xa tính từ mặt phẳng quan sát chưa Hình 7-15 minh họa trường hợp mà đổi chổ S S’’ với Nhưng S’’che khuất phần S’ (nhìn lên từ mặt xy), cần đổi chổ S’’ S’ với để có ba mặt hợp lý theo độ sâu Do đó, cần lặp lại trình kiểm tra cho mặt, vừa lại danh sách zv zv S’ S S S’’ xv Hình 7-14 Mặt S có độ sâu z lớn S’ xv Hình 7-15 Ba mặt ban đầu theo thứ tự độ sâu z : S, Thuật toán vừa phác thảo vào vịng lặp vơ tận hai hay nhiều mặt che khuất lẫn cách luân phiên hình 7-7 (xem hình 7-7) Trang 146 Chương 7: Khử mặt kuất đường khuất Trong trường hợp thế, thuật toán lặp lặp lại không ngừng việc đổi chỗ vị trí mặt nằm chồng Để tránh vịng lặp thế, đặt cờ trạng thái cho mặt vừa đến vị trí xa để khơng bị di chuyển lại Nếu có cố gắng làm để đổi chỗ mặt lần thứ hai, ta chia làm hai phần đường cắt (đường giao) hai mặt Mặt ban đầu sau thay hai mặt mới, ta lại tiếp tục trình xử lý trước 7.6 Phương pháp phân chia vùng (Area- Subdivision Method) Kỹ thuật khử mặt khuất hiệu cho phương pháp khơng gian ảnh, phương pháp khơng gian đối tượng dùng để thực việc xếp mặt theo độ sâu Phương pháp phân chia vùng tận dụng thuận lợi vùng cố kết ảnh cách xác định vùng quan sát để tách chúng làm nhiều phần nhỏ, phần xem mặt đơn lẻ Chúng ta áp dụng phương pháp cách phân chia thành cơng tồn vùng quan sát thành hình chữ nhật lúc nhỏ Hình 7-16 Các phần chia thực thành công với phép chia vùng nhỏ hình chiếu phần mặt đơn lẻ nhìn thấy được, tiếp tục phân chia Để thực phương pháp này, ta cần xây dựng phép kiểm tra để xác định nhanh chóng vùng phần mặt đơn lẻ cho ta biết vùng q phức tạp để phân tích bình thường Bắt đầu với nhìn tổng thể, ta áp dụng phép kiểm tra để xác định xem có nên phân chia tồn vùng thành hình chữ nhật nhỏ không Nếu phép kiểm tra mặt quan sát đủ phức tạp, ta phân chia Kế tiếp, áp dụng phép kiểm tra đến vùng nhỏ hơn, chia nhỏ vùng phép kiểm tra xác định tính nhìn thấy mặt đơn chưa chắn Chúng ta tiếp tục trình đến phần phân chia dễ dàng phân tích mặt đơn lẻ đến chúng thu giảm kích thước thành pixel Trang 147 Chương 7: Khử mặt kuất đường khuất Một cách để phân chia vùng thành công chia kích thước làm 2, hình 7-16 Một vùng quan sát với độ phân giải 1024x1024 chia 10 lần trước phần chia giảm thành điểm Các phép kiểm tra để xác định tính nhìn thấy mặt đơn phạm vi vùng định thực cách so sánh mặt với biên vùng Có bốn khả xảy xem xét mối quan hệ mặt với biên vùng định Ta mơ tả đặc điểm quan hệ theo cách sau (xem hình 7-17): Mặt bao quanh (surrounding surface) mặt hoàn toàn bao quanh vùng Mặt nằm chồng (overlapping surface) mặt có phần nằm phần nằm vùng Mặt bên (inside surface) mặt hoàn toàn nằm bên vùng Mặt bên (outside surface) mặt hồn tồn nằm bên ngồi vùng Hình 7-17 Các quan hệ xảy mặt đa giác vùng chữ nhật Mặt bao quanh Mặt nằm chồng Mặt bên Mặt bên Các phép kiểm tra để xác định tính nhìn thấy mặt phạm vị vùng đề cập giới hạn bốn loại Khơng có phân chia thêm cho vùng điều kiện sau (true): Tất mặt nằm bên vùng Chỉ mặt bên trong, mặt nằm chồng mặt bao quanh vùng Một mặt bao quanh che khuất tất mặt khác phạm vi biên vùng Kiểm tra thực cách kiểm tra biên chữ nhật bao quanh mặt với biên vùng Kiểm tra dùng biên chữ nhật mặt Trang 148 Chương 7: Khử mặt kuất đường khuất xy để xác định mặt nằm Với kiểu mặt khác, biên chữ nhật dùng bước kiểm tra ban đầu Nếu biên chữ nhật cắt vùng theo cách đó, kiểm tra thực để xác định xem mặt là: mặt bao quanh, mặt nằm chồng, hay mặt bên Nếu xác định mặt bên trong, mặt nằm chồng, hay mặt bao quanh, giá trị độ sáng pixel chuyển đến vùng thích hợp vùng đệm khung Một phương pháp để thực bước xếp mặt dựa theo độ sâu nhỏ chúng Sau đó, với mặt bao quanh, ta tính giá trị z lớn vùng xem xét Nếu giá trị lớn z mặt (trong số mặt mặt bao quanh) nhỏ giá trị z nhỏ mặt lại vùng, kiểm tra thỏa Hình 7-18 trình bày ví dụ chứa điều kiện phương pháp zv z’’min z’min zmax xv Vùng xem xét Hình 7-18 Một mặt bao quanh với độ sâu lớn zmax (xét vùng quan sát) che khuất tất mặt mà độ sâu nhỏ xmin chúng lớn zmax Một phương pháp khác để thực kiểm tra mà không cần đến xếp độ sâu dùng phương trình mặt phẳng để tính giá trị z bốn đỉnh vùng cho tất mặt bao quanh, mặt nằm chồng, hay mặt bên Nếu giá trị z số mặt bao quanh mà nhỏ giá trị z mặt lại, kiểm tra Sau vùng tơ với giá trị độ sáng mặt bao quanh Trong vài trường hợp, hai phương pháp cho kiểm tra thất bại để xác định mặt bao quanh che khuất tất mặt lại khác Việc kiểm tra thêm thực để xác định mặt đơn che phủ vùng, nhiên, thuật toán Trang 149 Chương 7: Khử mặt kuất đường khuất nhanh ta phân chia vùng tiếp tục làm kiểm tra phức tạp Khi mặt bên mặt bao quanh vừa xác định cho vùng, chúng cịn lại mặt bên bao quanh cho tất phần phân chia vùng Hơn nữa, vài mặt bên mặt nằm chồng chờ để bị loại bỏ trình phân chia tiếp tục, để vùng trở nên dễ dàng cho phân tích Trong trường hợp đến giới hạn, kích thước vùng chia cịn pixel, ta đơn giản tính độ sâu mặt có liên quan điểm chuyển giá trị độ sáng mặt gần vào vùng đệm khung yv • zv Vùng A • S • Hình 7-19 Vùng A phân chia thành A1 A2 cách dùng biên mặt S mặt phẳng chiếu A2 A1 xv Như thay đổi lên trình phân chia bản, ta phân chia vùng dọc theo biên mặt thay chia chúng làm Nếu mặt vừa theo độ sâu nhỏ nhất, ta dùng mặt có giá trị z nhỏ để phân chia vùng cho Hình 7-19 minh họa phương pháp để phân chia vùng Hình chiếu biên mặt S dùng để phân chia vùng ban đầu thành phần A1 A2 Mặt S sau trở thành mặt bao quanh A1 phép kiểm tra áp dụng để xác định xem việc phân chia thêm có cần thiết khơng Trong trường hợp tổng quát, phân chia cần dùng tiếp cận này, nhiên nhiều xử lý thêm cần để chia vùng phân tích mối liên hệ mặt với biên vùng chia 7.7 Các phương pháp Octree (Octree Methods) Khi biểu diễn octree dùng cho không gian quan sát, việc khử mặt khuất thực cách chiếu nút octree lên mặt quan sát theo thứ tự từ trước sau Trong hình 7-20, mặt phía trước vùng khơng gian (mặt hướng phía Trang 150 Chương 7: Khử mặt kuất đường khuất người quan sát) hình thành với phần tám (octant) 0, 1, 2, Mặt trước octant nhìn thấy người quan sát Bất kỳ mặt hướng phía sau octant phía trước octant đằng sau (4, 5, 6, 7) bị che khuất mặt phía trước Các mặt phía sau bị loại bỏ, với hướng quan sát hình 7-20, cách xử lý phần tử liệu nút octree theo thứ tự 0, 1, 2, 3, 4, Hướng quan sát Các Octant đánh số vùng 5, 6, Điều tạo kết du hành theo độ sâu octree, để octant 0, 1, 2, toàn vùng viếng thăm trước octant 4, 5, 6, Hình 7-20 Các đối tượng octant 0, 1, 2, che khuất octant phía sau (4, 5, 6, 7) hướng quan sát hình Tương tự, bốn octant trước octant viếng thăm trước bốn octant phía sau Cuộc du hành Hình 7-21 Sự phân chia octant cho vùng khơng gian mặt phần tư tương ứng octree, vùng pixel vùng đệm khung tương chia octant Khi giá trị màu gặp nút octree tiếp tục theo thứ tự cho phần Các octant không gian ứng với nút gán giá trị màu khơng giá trị lưu trước vùng Khơng nạp vùng trống rỗng Bất kỳ nút phát bị che khuất hồn tồn bị loại bỏ khỏi xử lý tương lai, để các khơng Các quadrant (góc 1/4) mặt phẳng quan sát truy cập vào Các quang cảnh khác đối tượng biểu diễn octree đạt cách áp dụng phép biến đổi đến biểu diễn octree để làm thay đổi đối tượng theo hướng quan sát Ta giả sử biểu diễn octree xây dựng cho octant 0, 1, 2, vùng hình thành nên mặt phía trước (xem hình 7-20) Trang 151 Chương 7: Khử mặt kuất đường khuất Một phương pháp để hiển thị octree từ trước sau ánh xạ octree vào quadtree vùng nhìn thấy cách duyệt qua nút octree từ trước sau trình đệ quy Sau biểu diễn quadtree mặt nhìn thấy được nạp vào vùng đệm khung Hình 7-21 mơ tả octant vùng khơng gian quadtree tương ứng mặt phẳng quan sát Các phần tạo thành quadtree lấy từ octant Các giá trị màu góc phần tư (quadrant 1) có từ mặt octant 5, giá trị hai quadrant lại sinh từ cặp octant thẳng hàng với quadrant Việc xử lý đệ quy nút octree trình bày thủ tục convert_oct_to_quad, nơi nhận vào mô tả octree tạo biểu diễn quadtree cho mặt nhìn thấy vùng Trong hầu hết trường hợp, octant phía trước phía sau phải xem xét để xác định màu cho quadrant Tuy nhiên, ta bỏ qua q trình xử lý octant phía sau octant phía trước tơ đồng với vài màu Đối với vùng không đồng nhất, thủ tục gọi đệ quy, với đối số – octant không đồng nút quadtree tạo Nếu octant phía trước rỗng, cần xử lý octant phía sau Ngược lại, hai lời gọi đệ quy làm, cho octant phía sau cho octant phía trước type oct_node_ptr =^ oct_node; oct_entry = record case homogeneous: boolean of true : (color : integer); false : (child : oct_node_ptr) end; {record} oct_node = array [0 7] of oct_entry; quad_node_ptr = ^ quad_node; quad_entry = record case homogeneous: boolean of true : (color : integer); false : (child : oct_node_ptr) end; {record} Trang 152 Chương 7: Khử mặt kuất đường khuất quad_node = array[0 3] of quad_entry; var newquadtree : quad_node_ptr; backcolor: integer; {Giả sử quang cảnh phía trước octree (với octant 0, 1, 2, phía trước) và, biểu diễn hiển thị, biến đổi thành quatree Nhận octree input, nơi mà phần tử octree giá trị màu (homogeneous = true octant tô với màu này) trỏ đến nút octant (homogeneous = false).} procedure convert_oct_to_quad(octree: oct_node; var quadtree: quad_node); var k: integer; begin for k:=0 to begin quadtree[k].homogeneous:=true; if (octree[k].color>-1) then {octant trước đầy} quadtree[k].color:= octree[k].color else {octant trước rỗng} if octree[k+4].homogeneous then if (octree[k+4].color > -1) then {trước rỗng, sau đầy} quadtree[k].color:=octree[k+4].color else {trước sau rỗng} quadtree[k].color:=backcolor else begin {trước rỗng, sau không đồng nhất} quadtree[k].homogeneous:=flase; new(newquadtree); quadtree[k].child: = newquadtree; convert_oct_to_quad(octree[k+4].child^, newquadtree^); Trang 153 Chương 7: Khử mặt kuất đường khuất end else begin {trước không đồng nhất, sau không biết} quadtree[k].homogeneous:=false; new(newquadtree); quadtree[k].child:= newquadtree; convert_oct_to_quad(octree[k+4].child^, newquadtree^); convert_oct_to_quad(octree[k].child^, newquadtree^); end; end; {for} end; 7.8 Loại bỏ đường bị che khuất Khi phác họa đối tượng hiển thị, phương pháp khử đường khuất dùng đến để loại bỏ viền đối tượng, bị che khuất mặt gần mặt phẳng quan sát Các phương pháp để loại bỏ đường khuất phát triển cách xem xét viền đối tượng cách trực tiếp hay cách chỉnh sửa lại phương pháp khử mặt khuất Hình 7-22 Phần đoạn thẳng bị khuất (nét đứt) đường thẳng: (a) qua sau mặt (b) xuyên qua mặt che phía đâm Một tiếp cận trực tiếp để loại bỏ đường khuất so sánh đường với mặt ảnh Quá trình tương tự clipping đường cửa sổ có hình dạng bất kỳ, khác chổ muốn cắt bỏ phần bị che khuất mặt Đối với đường, giá trị độ sâu so sánh với mặt để xác định xem phần đoạn thẳng khơng nhìn thấy Chúng ta dùng phương pháp cố kết để xác định phần bị che khuất mà không cần kiểm tra tồn vị trí tọa độ Nếu hai giao điểm đường thẳng với hình chiếu biên bề mặt có độ sâu lớn độ sâu mặt điểm này, đoạn thẳng giao điểm hoàn Trang 154 Chương 7: Khử mặt kuất đường khuất toàn bị che khuất, hình 7-22 (a) Khi đường thẳng có độ sâu lớn độ sâu giao điểm với biên có độ sâu nhỏ độ sâu mặt giao điểm với biên lại, đường thẳng phải xuyên qua mặt hình 7-22 (b) Trong trường hợp này, tính tọa độ giao điểm đường với mặt cách dùng phương trình mặt hiển thị phần nhìn thấy đường thẳng Vài phương pháp khử mặt khuất dễ dàng áp dụng để khử đường khuất Dùng phương pháp mặt sau (back-face), nhận biết mặt sau đối tượng hiển thị biên mặt nhìn thấy Với phương pháp xếp theo độ sâu, mặt vẽ vào vùng đệm làm tươi để phần bên mặt có độ sáng nền, biên có độ sáng độ sáng vẽ Bằng cách xử lý mặt từ sau đến trước, đường khuất bị xóa mặt gần Phương pháp chia vùng áp dụng để khử đường khuất cách hiển thị biên mặt nhìn thấy Các phương pháp scan-line dùng để hiển thị đường nhìn thấy cách bố trí điểm dọc theo đường quét, điểm trùng với biên mặt nhìn thấy Bất kỳ phương pháp khử mặt khuất dùng đường quét thay đổi thành phương pháp khử đường khuất theo cách tương tự (xem hình 7-23) V •2 Hình 7-23 Các bảng liệu hình học cho đối tượng ba chiều biểu diễn hai mặt phẳng, hình thành với sáu cạnh năm đỉnh E2 E1 S V1 • E2 E6 S2 •V5 • V3 E6 •V VERTEX TABLE V1: x1, y1, z1 V2: x2, y2, z2 V3: x3, y3, z3 V4: x4, y4, z4 V5: x5, y5, z5 EDGE TABLE E1: V1, V2, S1 E2: V2, V3, S1, S2 E3: V3, V1, S1 E4: V3, V4, S2 E5: V4, V5, S2 E6: V5, V2, S2 POLYGON TABLE S1: E1, E2, E3 S2: E2, E4, E5, E6 Trang 155 Chương 7: Khử mặt kuất đường khuất 7.9 Tổng kết chương So sánh phương pháp khử mặt khuất Hiệu phương pháp khử mặt khuất phụ thuộc vào đặc tính ứng dụng cụ thể Nếu mặt ảnh nằm trải hướng z để có nằm chồng theo độ sâu, phương pháp xếp theo độ sâu tốt Với ảnh có mặt nằm tách biệt theo chiều ngang, phương pháp scan-line phân chia vùng lựa chọn tốt Trong phương pháp chọn này, kỹ thuật xếp cố kết đem đến thuận lợi thuộc tính tự nhiên ảnh Vì xếp cố kết quan trọng đến hiệu toàn diện phương pháp khử mặt khuất, kỹ thuật để thực thao tác cần chọn lựa cẩn thận Khi đối tượng biết theo thứ tự xác, danh sách động chứa cạnh bảng cạnh dùng phương pháp scan-line, xếp bubble sort hiệu để thực việc đổi chỗ Tương tự, kỹ thuật cố kết áp dụng để quét đường, vùng, hay khung (frame) cơng cụ hữu hiệu làm tăng hiệu phương pháp khử mặt khuất Như quy tắc tổng quát, phương pháp xếp theo độ sâu tiếp cận có hiệu cao cho ảnh có vài mặt Điều ảnh thường có vài mặt nằm chồng theo độ sâu Phương pháp scan-line thực tốt ảnh chứa mặt Dù phương pháp scan-line hay xếp theo độ sâu dùng hiệu cho ảnh có đến vài ngàn mặt Với ảnh có vài ngàn mặt, tiếp cận vùng đệm độ sâu octree thực tốt Phương pháp vùng đệm độ sâu có thời gian xử lý hằng, độc lập với số lượng mặt ảnh Điều kích thước vùng mặt giảm số lượng mặt ảnh tăng Do đó, cách tương đối, phương pháp xếp theo độ sâu thể thực ảnh đơn giản thực hiệu ảnh phức tạp Tiếp cận đơn giản để cài đặt, nhiên, cần nhiều nhớ tất phương pháp khác Vì lý này, phương pháp khác, octree phân chia vùng dùng cho ảnh có nhiều mặt Khi phương pháp octree dùng hệ thống, việc xử lý loại bỏ mặt khuất nhanh đơn giản Chỉ cần dùng phép cộng trừ, không cần xếp tìm giao điểm Một thuận lợi khác octree chúng lưu nhiều mặt Trang 156 Chương 7: Khử mặt kuất đường khuất Tồn hình thể ba chiều đối tượng hiển thị, điều làm cho phương pháp octree hữu ích để thu lát cắt hình thể ba chiều Ta kết hợp cài đặt phương pháp khử mặt khuất khác theo cách khác Hơn nữa, thuật toán cài đặt phần cứng, hệ thống xử lý song song đặc biệt tận dụng để làm tăng hiệu phương pháp Các hệ thống phần cứng đặt biệt thường dùng tốc độ xử lý xem quan trọng, ví dụ, việc tạo hình ảnh động mô bay 7.10 Bài tập chương Phát triển thủ tục, dựa kỹ thuật khử mặt sau, để xác định tất mặt trước khối đa diện lồi với mặt có màu khác liên hệ đến mặt quan sát Giả sử đối tượng định nghĩa hệ quan sát bàn tay trái với mặt xy dùng làm mặt quan sát Cài đặt thủ tục vào chương trình để chiếu trực giao mặt nhìn thấy đối tượng lên cửa sổ mặt phẳng quan sát Để đơn giản, giả sử tất phần đối tượng nằm phía trước mặt phẳng quan sát Ánh xạ cửa sổ lên vùng quan sát hình để hiển thị Cài đặt thủ tục vào chương trình để tạo hình chiếu phối cảnh mặt nhìn thấy đối tượng lên cửa sổ mặt phẳng quan sát Để đơn giản, giả sử đối tượng nằm phía trước mặt phẳng quan sát Ánh xạ cửa sổ lên vùng quan sát hình để hiển thị Viết chương trình để cài đặt thủ tục cho ứng dụng động, quay đối tượng cách tăng dần xung quanh trục, đâm xuyên qua đối tượng song song với với mặt phẳng quan sát Giả sử đối tượng nằm hoàn toàn phía trước mặt phẳng quan sát Dùng phép chiếu song song trực giao để ánh xạ thành công ảnh lên hình Dùng phương pháp vùng đệm độ sâu để hiển thị mặt nhìn thấy đối tượng bất kỳ, định nghĩa hệ tọa độ chuẩn phía trước vùng quan sát Các phương trình (7-4) (7-5) dùng để thu giá trị độ sâu cho tất điểm mặt độ sâu khởi tạo vừa Trang 157 ... phương trình 1 3-3 sau: z'' = − A( x + 1) − By − D C Hình 7- 5 Từ vị trí (x, y) đường qt, vị trí qua phải có tọa độ (x+1, y), vị trí liền bên dịng có tọa độ (x, y-1) z'' = z − A C y ( 7- 4 ) y y-1 • • • x... Hình 7- 1 4 Mặt S có độ sâu z lớn S’ xv Hình 7- 1 5 Ba mặt ban đầu theo thứ tự độ sâu z : S, Thuật toán vừa phác thảo vào vịng lặp vô tận hai hay nhiều mặt che khuất lẫn cách luân phiên hình 7- 7 (xem... phương trình đường thẳng mặt xy Như minh họa hình 7- 1 3, hai mặt cắt khơng cắt chí khơng gian bao quanh chồng theo hướng x, y, z (xem hình 7- 1 3) Hình 7- 1 3 Hai mặt với biên chữ nhật nằm chồng mặt xy

Ngày đăng: 13/07/2014, 00:20

Từ khóa liên quan

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

Tài liệu liên quan