• Mở rộng tư tưởng của thuật toán tô màu scanline.. • Với mỗi scanline xác định các đoạn ứng với các mặt: ♦ Xác định các giao điểm của scanline với các đường biên.. ♦ Sắp xếp các giao đi
Trang 1• Mở rộng tư tưởng của thuật toán tô màu scanline.
• Quét scanline dọc theo VP.
• Với mỗi scanline xác định các đoạn ứng với các mặt:
♦ Xác định các giao điểm của scanline với các đường biên
♦ Sắp xếp các giao điểm theo thứ tự tăng dần của x
♦ Với mỗi đoạn tô bằng 1 màu (của mặt gần nhất)
Trang 2Warnock’s Algorithm
• Bắt đầu với vùng là toàn bộ viewport
• Tô một vùng nếu:
♦ Không có mặt nào giao với nó: màu nền
♦ Chỉ có duy nhất 1 mặt giao với nó: đơn giản
♦ Có một mặt che khuất tất cả các mặt khác trong vùng
• Ngược lại: chia nhỏ vùng làm 4, tiếp tục qui trình với từng vùng con.
Trang 3BSP Algorithm
• BSP: Binary Space Partitioning
• Thuật toán cung cấp một qui trình chia nhỏ không gian và xác định thứ tự vẽ các đối tượng.
• Dùng chiến lược chia để trị:
♦ Để hiển thị các polygon đúng, ta hiển thị các polygon ở phía “xa” trước sau đó mới hiển thị các polygon ở phía
“gần” (Gần là phía chứa View point)
♦ Để hiển thị đúng các polygon ở cùng một phía, ta chọn một polygon bất kỳ làm chuẩn chia và xử lý đệ qui
• Xét một ví dụ:
Trang 4• Bắt đầu từ mặt số 3:
• Nếu bắt đầu từ mặt số 5 ta có kết quả khác:
Trang 5void BSP_displayTree(BSP_tree* tree)
{
if ( tree is not empty )
if ( viewer is in front of root ) {
BSP_displayTree(tree->backChild);
displayPolygon(tree->root);
BSP_displayTree(tree->frontChild)
}
else {
BSP_displayTree(tree->frontChild);
/* ignore next line if back-face culling desired */
displayPolygon(tree->root);
BSP_displayTree(tree->backChild)
} }
• Hidden surface algorithms
♦ Back-face detection
♦ Depth sort
♦ Ray casting
♦ Z-buffer
♦ Scan-line
♦ Area subdivision (Warnock’s)
♦ BSP