5. TỔNG QUAN VỀ MỘT HỆ ĐỒ HỌA
7.2.1. Giải thuật Depth-sorting
Giải thuật người thợ sơn hay Depth-sorting là tên của một thuật giải đơn giản nhất trong số các thuật tốn vẽ ảnh thực 3 chiều. Nếu để ý người thợ sơn làm việc, ta sẽ thấy anh ta sơn bức tranh từ trong ra ngồi, với các cảnh vật từ xa đến gần. Chúng ta cĩ thể áp dụng một cách tương tự để vẽ các đa giác trong danh sách các đa giác. Song cĩ một vấn đề cần phải chọn lựa, đĩ là một đa giác tồn tại trong khơng gian 3D cĩ tới ba bốn đỉnh, và những đỉnh này cĩ thể cĩ các giá trị z (giá trị độ sâu) khác nhau. Chúng ta sẽ khơng biết chọn giá trị nào trong số chúng. Từ những kinh nghiệm trong thực tế, người ta cho rằng nên sử dụng giá trị z trung bình sẽ cho kết quả tốt trong hầu hết các trường hợp.
Do đĩ, cần phải sắp xếp các mặt theo thứ tự từ xa đến gần, sau đĩ vẽ các mặt từ xa trước, rồi vẽ các mặt ở gần sau, như thế thì các mặt ở gần sẽ khơng bị che khuất bởi các mặt ở xa, mà chỉ cĩ các mặt ở xa mới cĩ thể bị các mặt ở gần che khuất, do các mặt ở gần vẽ sau nên cĩ thể được vẽ chồng lên hình ảnh của các mặt xa.
Như vậy, giải thuật Depth-Sorting được thực hiện một cách dễ dàng khi chúng ta xác định một giá trị độ sâu (là giá trị z trong hệ toạ độ quan sát) đại diện cho cả mặt. Các mặt dựa vào độ sâu đại diện của mình để so sánh rồi sắp xếp theo một danh sách giảm dần (theo độ sâu đại diện). Bước tiếp theo là vẽ các mặt lên mặt phẳng theo thứ tự trong danh sách.
Giải thuật cịn một số vướng mắc sau (Hình 7.2):
¾ Khi hai mặt cắt nhau thì thuật giải này chỉ thể hiện như chúng chồng lên nhau.
¾ Khi hai mặt ở trong cùng một khoảng khơng gian về độ sâu và hình chiếu của chúng lên mặt phẳng chiếu chồng lên nhau (hay chồng một phần lên nhau). Chẳng hạn như Hình 7.3.
Hình 7.2
Từ những ví dụ trên ta thấy rằng, cĩ những trường hợp các đa giác được sắp xếp sai dẫn đến kết quả hiển thị khơng đúng. Liệu cĩ thể khắc phục được vấn đề này khơng? Câu trả lời dĩ nhiên là cĩ nhưng cũng đồng nghĩa là phải xử lý thêm rất nhiều các trường hợp và làm tăng độ phức tạp tính tốn.
Mắt nhìn Mặt A
Mặt B
Hình 7.3
• Phép kiểm tra phần kéo dài Z
Phép kiểm tra này nhằm xác định phần kéo dài z của hai đa giác cĩ gối lên nhau hay khơng? Nếu các phần kéo dài Z là gối lên nhau rất cĩ thể các đa giác này cần được hốn đổi. Vì thế phép kiểm tra tiếp theo phải được thực hiện.
• Phép kiểm tra phần kéo dài X
Phép kiểm tra này tương tự như phép kiểm tra trước, nhưng nĩ sẽ kiểm tra phần kéo dài X của hai đa giác cĩ gối lên nhau hay khơng? Nếu cĩ, thì rất cĩ thể các đa giác này cần được hốn đổi. Vì thế phép kiểm tra tiếp theo phải được thực hiện.
• Phép kiểm tra phần kéo dài Y
Phép kiểm tra này kiểm tra phần kéo dài Y của hai đa giác cĩ gối lên nhau hay khơng? Nếu cĩ, thì rất cĩ thể các đa giác này cần được hốn đổi. Vì thế phép kiểm tra tiếp theo phải được thực hiện.
• Phép kiểm tra cạnh xa
Giả sử A và B là hai đa giác mà sau khi sắp xếp theo độ sâu trung bình thì A đứng trước B. Song qua 3 phép kiểm tra trên mà vẫn khơng xác định được liệu trật tự trên là đúng hay chưa. Lúc này chúng phải tiến hành phép kiểm tra cạnh xa. Phép kiểm tra cạnh xa nhằm xác định
xem đa giác B cĩ nằm phía sau cạnh xa của đa giác A hay khơng? Nếu cĩ thì trật tự này là đúng, ngược lại thì phải qua bước kiểm tra tiếp theo.
Để kiểm tra đa giác B cĩ nằm sau cạnh xa của đa giác A hay khơng, chúng ta thực hiện việc kiểm tra mỗi đỉnh của đa giác B. Các đỉnh này đều nằm về cùng một phía của đa giác A theo chiều trục Z khơng? Nếu đúng thì kết quả trật tự trên là đúng. Ngược lại, cĩ thể xảy ra một trong hai tình huống như Hình 6.2 hoặc Hình 6.3, để xác định được ta phải tiếp tục sang bước kiểm tra tiếp theo.
• Phép kiểm tra cạnh gần
Phép kiểm tra cạnh gần nhằm xác định xem đa giác A cĩ nằm phía sau cạnh gần của đa giác B hay khơng? Nếu cĩ thì trật tự xác định trước đây khơng đúng, chúng ta cần phải hốn đổi lại trật tự. Ngược lại thì rõ ràng hai đa giác đang cắt nhau (như Hình 6.2) hoặc chéo vào nhau (Hình 6.4), lúc này chúng ta phải tiến hành chia nhỏ hai đa giác A và B thành 3 (hoặc 4) đa giác con, đường chia cắt chính là đường giao cắt của 2 đa giác. Sau phép chia chúng ta tiến hành sắp xếp lại các đa giác con.
Hình 7.4