Theo như tôi biết, chúng tôi không thể đọc giá trị Z (chiều sâu) trong OpenGL ES 2.0. Vì vậy, tôi tự hỏi làm thế nào chúng ta có thể có được tọa độ thế giới 3D từ một điểm trên màn hình 2D?OpenGL es 2.0 Đọc bộ đệm sâu
Thực ra tôi có một số suy nghĩ ngẫu nhiên có thể hoạt động. Vì chúng ta có thể đọc giá trị RGBA bằng cách sử dụng glReadPixels, làm thế nào chúng ta sao chép bộ đệm độ sâu và lưu trữ nó trong một bộ đệm màu (nói ColorforDepth). Tất nhiên cần phải có một số quy ước tốt đẹp để chúng tôi không mất bất kỳ thông tin nào về bộ đệm độ sâu. Và sau đó khi chúng ta cần tọa độ thế giới của một điểm, chúng tôi đính kèm bộ đệm màu ColorforDepth này vào bộ đệm khung và sau đó hiển thị nó. Vì vậy, khi chúng tôi sử dụng glReadPixels để đọc thông tin chi tiết tại khung này.
Tuy nhiên, điều này sẽ dẫn đến 1 khung hình flash vì bộ đệm màu là một bộ đệm lạ được dịch từ bộ đệm độ sâu. Tôi vẫn tự hỏi nếu có một số cách tiêu chuẩn để có được chiều sâu trong OpenGL es 2.0?
Thx trước! :)
Tommy, bạn có thể nói thêm một chút về việc tách gl_FragCoord.z giữa các thành phần hay không. Không tuân theo. Chúc mừng. – dugla
@dugla Nếu chiều sâu là một số nguyên 32 bit, bạn có thể nhưng 8 bit của nó trong mỗi R, G, B và A. Vì vậy, trong thực tế những gì bạn muốn làm là một cái gì đó giống như nhân vectơ '(1, 256 , 65536, 16777216) ', sau đó lưu trữ mỗi thành phần của vectơ mod 1.0 đó vào các kênh liên quan. Bạn có thể kết hợp lại sau bằng cách chia cho các thành phần liên quan và cộng lại với nhau. – Tommy