Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Phương pháp Z-Buffer hoặc Depth-Buffer trong C++


Z-buffer, còn gọi là depth-buffer, là một phương pháp dùng để phát hiện mặt ẩn (hidden surface detection).

Phát hiện mặt ẩn

Đối với hình ảnh có các đối tượng và bề mặt trong suốt. Trong trường hợp này, các đối tượng phía sau các đối tượng khác sẽ bị che khuất. Để hiển thị hình ảnh đúng đắn, cần loại bỏ các mặt ẩn này. Việc nhận diện được gọi là vấn đề mặt ẩn.

Trong Z-buffer, chúng ta so sánh các bề mặt theo trục Z (độ sâu).

Thuật toán

Bước 1: Khởi tạo độ sâu của tất cả pixel là giá trị tối đa.   d(i,j) = vô cực
Bước 2: Khởi tạo màu cho tất cả pixel.   c(i,j) = màu nền
Bước 3: Với mỗi pixel trong chiếu của đa giác:
    Bước 3.1: Tìm z là độ sâu của pixel (i,j) trong chiếu.
    Bước 3.2: Nếu z < d(i,j) thì:
        Bước 3.2.1: d(i,j) = z và c(i,j) = màu của đa giác.

Sử dụng phương pháp này pixel bởi pixel, chúng ta tìm độ sâu của từng pixel trên mặt phẳng. Bề mặt có độ sâu nhỏ nhất quyết định màu của buffer. Thông thường, tất cả giá trị Z nằm trong khoảng [0,1].

z=0 là mặt cắt sau (back clipping plane) và z=1 là mặt cắt trước (front clipping plane).

Một số điểm quan trọng của Z-buffer

  • Không cần sắp xếp ban đầu các đa giác (mặt phẳng) để áp dụng phương pháp Z-buffer.

  • Z-buffer cho kết quả nhanh ngay cả khi số lượng mặt phẳng lớn.

  • Không cần so sánh đối tượng trong phương pháp Z-buffer.

  • Các đối tượng ẩn không phải đa giác cũng có thể được phát hiện bằng phương pháp này.

  • Không cần cấu trúc dữ liệu thêm để lưu trữ và giải quyết.

  • Có thể triển khai phần cứng để tăng tốc quá trình và được sử dụng chủ động trong các trạm làm việc đồ họa.

  • Phương pháp chỉ áp dụng khi các đối tượng là mờ (opaque), đối tượng trong suốt có thể gây lỗi.

  • Vẽ mặt ẩn có thể là quá trình tốn thời gian.