Phương pháp sắp xếp theo độ sâu (Depth-Sorting Method)

Một phần của tài liệu giao trinh ktdh (Trang 143 - 147)

Chương 2 : CÁC THUẬT TOÁN TÔ MÀU

7.5. Phương pháp sắp xếp theo độ sâu (Depth-Sorting Method)

C B A (a) C B A (b) G F E D Hình 7-8 Chia một mặt ra làm nhiều mặt để tránh các vấn đề nhìn thấy và

khơng nhìn thấy luân phiên giữa hai mặt.

Ta có thể sử dụng cả hai phương pháp không gian ảnh và không gian đối tượng trong một thuật toán khử mặt khuất. Phương pháp sắp xếp theo độ sâu (depth-

sorting method) là một sự nối kết của hai tiếp cận trên, nó thực hiện các công việc cơ

bản sau:

1. Các mặt được sắp theo thứ tự giảm dần của độ sâu.

2. Các mặt được vẽ theo thứ tự từ mặt có độ sâu lớn nhất đến mặt có độ sâu nhỏ nhất (vẽ từ mặt xa nhất đến mặt gần nhất).

Các các thao tác sắp xếp được thực hiện trong khơng gian đối tượng, cịn sự

chuyển đổi dòng quét (scan conversion) được thực hiện trong không gian ảnh.

Phương pháp giải quyết vấn đề mặt khuất này đơi khi cịn được gọi là thuật toán của họa

sĩ (painter’s algorithm). Để tạo ra một bức sơn

dầu (oil painting), đầu tiên họa sĩ sơn các độ sáng nền. Kế tiếp, các đối tượng ở xa nhất được thêm vào. Sau cùng, các đối tượng ở gần được

vẽ phủ lên các đối tượng ở xa đó. Mỗi lớp vẽ

sau phủ lên lớp vẽ trước đó. Dùng kỹ thuật

tương tự, chúng ta đầu tiên sắp xếp các mặt theo khoảng cách từ chúng đến mặt quan sát. Các giá trị độ sáng của mặt xa nhất được nhập vào vùng

xv zv zmax zmin Z’max Z’min S S’ Hình 7-9 Hai mặt khơng có sự nạp chồng độ sâu.

Chương 7: Khử các mặt kuất và đường khuất

vùng đệm làm tươi. Với mỗi mặt kế tiếp (xét theo thứ tự độ sâu giảm dần), ta “sơn”

các độ sáng của mặt lên vùng đệm làm tươi (phủ lên các độ sáng của mặt được xử lý trước đó).

Việc sơn các mặt đa giác lên vùng đệm làm tươi dựa theo độ sâu được thực hiện trong vài bước. Đầu tiên, các mặt được sắp xếp dựa vào giá trị z lớn nhất của mỗi mặt. Mặt với độ sâu lớn nhất (gọi là S) sau đó được so sánh với các mặt còn lại trong danh sách để xác định xem có bất kỳ sự chồng độ sâu nào khơng (nằm chồng lên nhau). Nếu khơng có sự chồng độ sâu nào xảy ra, S được vẽ ra (vẽ ra theo từng đường quét).

Trong hình 7-9 trình bày hai mặt khơng có sự chồng độ sâu (hai mặt khơng nằm chồng nhau), hình chiếu của chúng lên mặt phẳng xz. Xử lý này sau đó được lặp lại cho mặt kế tiếp trong danh sách. Khi khơng có sự chồng độ sâu nào xảy ra, mỗi mặt sẽ được xử lý theo thứ tự độ sâu đó cho đến khi tất cả đều được quét qua. Nếu có một sự chồng độ sâu được phát hiện ở bất kỳ điểm nào trong danh sách, ta cần làm vài so sánh bổ sung

để xác định xem mặt nào nên được sắp xếp lại.

Với mỗi mặt nằm chồng với S, ta thực hiện các phép kiểm tra sau. Chỉ cần một trong số các phép kiểm tra này là đúng (true), ta không cần sắp lại vị trí mặt đó. Các phép kiểm tra được lập danh sách theo mức độ khó tăng dần:

1. Trên mặt phẳng xy, các hình chữ nhật bao quanh hai mặt không chồng lên nhau.

xv zv

xmax

xmin x’min x’max

Hình 7-10

Hai mặt khơng có sự chồng độ sâu theo hướng x. S’ S 2. Mặt S thì ở “phía ngồi” mặt nằm chồng, so sánh dựa vào mặt phẳng quan sát. 3. Mặt nằm chồng thì ở “phía trong ” mặt S, so sánh dựa vào mặt phẳng quan sát.

4. Các hình chiếu của hai mặt lên mặt phẳng quan sát không nằm chồng lên nhau.

Chương 7: Khử các mặt kuất và đường khuất

Vừa khi một phép kiểm tra được phát hiện là đúng cho một mặt nằm chồng, ta biết rằng mặt khơng nằm phía sau S. Vì vậy ta chuyển đến mặt chồng S kế tiếp. Nếu tất cả các mặt mặt nằm chồng vượt qua được ít nhất một trong các phép kiểm tra trên, ta khơng phải sắp xếp và S có thể được vẽ ra.

Phép kiểm tra 1 được thực hiện trong hai phần: Chúng ta kiểm tra sự nằm chồng theo hướng x, sau đó kiểm tra nằm chồng theo hướng y. Nếu cái nào trong hai hướng này được phát hiện là khơng có nằm chồng, hai mặt phẳng khơng che khuất nhau. Một ví dụ về hai mặt có nằm chồng theo hướng z nhưng không chồng theo hướng x được cho trong hình 7-10.

Chúng ta có thể thực hiện phép kiểm tra 2 bằng cách thế tọa độ tất cả các đỉnh của S vào phương trình mặt của mặt nằm chồng và kiểm tra dấu của kết quả. Giả sử rằng mặt nằm chồng có hệ số A’, B’, C’, và D’. Nếu A’x + B’y + C’z + D’ > 0 với mỗi

đỉnh có tọa độ (x, y, z) của S, mặt S sẽ ở “phía ngồi” mặt nằm chồng S’ (xem hình 7-

11). Như được đề cập trước đây, các hệ số A’, B’, C’, và D’ phải được xác định trước

để pháp vector của mặt nằm chồng S’ chỉ ra xa khỏi mặt phẳng quan sát.

Hình 7-11

Mặt S hồn tồn ở “phía ngồi” mặt nằm chồng S’ khi nhìn từ mặt quan sát xy. xv zv S S’ Hình 7-12 Mặt nằm chồng S’ hồn tồn

ở “phía trong” mặt S, khi

nhìn từ mặt quan sát xy.

xv zv

S

S’

Phép kiểm tra 3 được thực hiện dùng các hệ số A, B, C, và D của mặt S. Nếu tọa độ (x, y, z) của tất cả các đỉnh của mặt nằm chồng S’ thỏa điều kiện Ax + By + Cz + D < 0, khi đó mặt nằm chồng S’ sẽ ở “phía trong” mặt S (cung cấp pháp vector của mặt S hướng ra xa mặt phẳng quang sát). Hình 7-12 trình bày một mặt nằm chồng S’ thỏa phép kiểm tra này. Trong ví dụ này, mặt S thì khơng ở “phía ngồi” S’ (phép kiểm tra 2 không đúng).

Chương 7: Khử các mặt kuất và đường khuất

Nếu tất cả các phép kiểm tra từ 1 đến 3 đều thất bại (sai), chúng ta thử đến phép kiểm tra 4 bằng cách kiểm tra sự cắt nhau giữa các cạnh biên của hai mặt, dùng các phương trình đường thẳng trong mặt xy. Như được minh họa trong hình 7-13, hai mặt có thể cắt hoặc khơng cắt nhau thậm chí khi các khơng gian bao quanh chồng nhau theo các hướng x, y, và z (xem hình 7-13).

Các mặt khơng cắt nhau Hình 7-13 Hai mặt với các chữ nhật nằm ch biên ồng . nhau trong mặt xy Các mặt cắt nhau

Nếu tất cả bốn phép kiểm tra trên đều thất bại với một mặt nằm chồng cụ thể S’, ta đổi chỗ hai mặt S và S’ cho nhau trong danh sách đã được sắp. Một ví dụ của hai mặt sẽ được sắp xếp lại với thủ tục này được cho trong hình 7-14. Tuy nhiên, ta vẫn

khơng biết chắc rằng ta đã tìm gặp mặt xa nhất tính từ mặt phẳng quan sát chưa. Hình 7-15 minh họa một trường hợp mà tại đó đầu tiên chúng ta đổi chổ S và S’’ với nhau. Nhưng vì S’’che khuất một phần của S’ (nhìn lên từ mặt xy), chúng ta cần đổi chổ S’’ và S’ với nhau để có ba mặt được sắp hợp lý theo độ sâu. Do đó, chúng ta cần lặp lại quá trình kiểm tra cho mỗi mặt, cái vừa được sắp lại trong danh sách.

Hình 7-14 Mặt S có độ sâu z lớn hơn xv zv S S’ Hình 7-15

Ba mặt ban đầu đã được sắp theo thứ tự độ sâu z : S,

xv zv

S’’ S’ S

Thuật toán vừa được phác thảo có thể đi vào một vịng lặp vô tận nếu hai hay nhiều mặt che khuất lẫn nhau một cách luân phiên như trong hình 7-7 (xem hình 7-7).

Chương 7: Khử các mặt kuất và đường khuất

Trong các trường hợp như thế, thuật toán sẽ lặp đi lặp lại không ngừng việc đổi chỗ vị trí của các mặt nằm chồng nhau. Để tránh các vịng lặp như thế, chúng ta có thể

đặt cờ trạng thái cho mặt nào vừa được sắp đến vị trí xa hơn để nó khơng bị di chuyển

lại nữa. Nếu có một sự cố gắng được làm để đổi chỗ các mặt lần thứ hai, ta chia nó ra làm hai phần tại đường cắt (đường giao) của hai mặt. Mặt ban đầu sau đó được thay

thế bởi hai mặt mới, và ta lại tiếp tục quá trình xử lý như trước đây.

Một phần của tài liệu giao trinh ktdh (Trang 143 - 147)

Tải bản đầy đủ (PDF)

(159 trang)