Tôi đang đọc một hướng dẫn OpenGL tuyệt vời . Nó thực sự tuyệt vời, tin tôi đi. Chủ đề tôi hiện đang ở là Z-buffer. Ngoài việc giải thích tất cả những gì về nó, tác giả đề cập rằng chúng ta có thể thực hiện các bài kiểm tra độ sâu tùy chỉnh, chẳng hạn như GL_LESS, GL_ALWAYS, v.v. Ông cũng giải thích rằng ý nghĩa thực sự của các giá trị độ sâu (là trên cùng và không phải) tùy chỉnh. Tôi hiểu cho đến nay. Và sau đó tác giả nói một điều không thể tin được:
Phạm vi zNear có thể lớn hơn phạm vi zFar; nếu có, thì các giá trị không gian cửa sổ sẽ bị đảo ngược, xét về những gì cấu thành gần nhất hoặc xa nhất với người xem.
Trước đó, người ta đã nói rằng giá trị Z của không gian cửa sổ là 0 gần nhất và 1 là xa nhất. Tuy nhiên, nếu các giá trị Z không gian clip của chúng tôi bị phủ định, độ sâu 1 sẽ gần nhất với chế độ xem và độ sâu 0 sẽ xa nhất. Tuy nhiên, nếu chúng ta lật hướng kiểm tra độ sâu (GL_LESS sang GL_GREATER, v.v.), chúng ta sẽ nhận được kết quả chính xác tương tự. Vì vậy, nó thực sự chỉ là một quy ước. Thật vậy, lật dấu Z và kiểm tra độ sâu đã từng là một tối ưu hóa hiệu suất quan trọng cho nhiều trò chơi.
Nếu tôi hiểu chính xác, khôn ngoan về hiệu suất, lật dấu Z và kiểm tra độ sâu thì không có gì khác ngoài việc thay đổi <
so sánh thành >
so sánh. Vì vậy, nếu tôi hiểu chính xác và tác giả không nói dối hoặc làm cho mọi thứ trở nên tồi tệ, thì việc thay đổi <
thành >
sử dụng là một tối ưu hóa quan trọng cho nhiều trò chơi.
Được tác giả làm cho mọi thứ lên, tôi hiểu lầm gì đó, hoặc là nó thực sự là trường hợp đó một lần <
là chậm ( cực kỳ quan , như tác giả nói) hơn >
?
Cảm ơn đã làm rõ vấn đề khá tò mò này!
Tuyên bố miễn trừ trách nhiệm: Tôi hoàn toàn biết rằng độ phức tạp của thuật toán là nguồn chính để tối ưu hóa. Hơn nữa, tôi nghi ngờ rằng ngày nay nó chắc chắn sẽ không tạo ra bất kỳ sự khác biệt nào và tôi không yêu cầu điều này để tối ưu hóa bất cứ điều gì. Tôi chỉ là vô cùng, đau đớn, có thể nghiêm túc tò mò.