Tôi có một cặp trình tạo bóng GLSL cung cấp cho tôi bản đồ độ sâu của các đối tượng trong cảnh của tôi. Những gì tôi nhận được bây giờ là khoảng cách từ mỗi điểm ảnh đến máy ảnh. Những gì tôi cần là để có được khoảng cách từ điểm ảnh đến mặt phẳng máy ảnh. Hãy để tôi minh họa bằng một bản vẽ nhỏĐộ sâu như khoảng cách đến mặt phẳng máy ảnh trong GLSL
* |--*
/ |
/ |
C-----* C-----*
\ |
\ |
* |--*
3 dấu hoa thị là pixel và C là máy ảnh. Các dòng từ dấu hoa thị là "chiều sâu". Trong trường hợp đầu tiên, tôi nhận được khoảng cách từ điểm ảnh đến máy ảnh. Trong lần thứ hai, tôi muốn lấy khoảng cách từ mỗi điểm ảnh đến mặt phẳng.
Phải có cách để thực hiện việc này bằng cách sử dụng một số ma trận chiếu, nhưng tôi bị chặn lại.
Dưới đây là các trình tạo bóng tôi đang sử dụng. Lưu ý rằng eyePosition là camera_position_object_space.
Vertex Shader:
void main() {
position = gl_Vertex.xyz;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Pixel Shader:
uniform vec3 eyePosition;
varying vec3 position;
void main(void) {
vec3 temp = vec3(1.0,1.0,1.0);
float depth = (length(eyePosition - position*temp) - 1.0)/49.0;
gl_FragColor = vec4(depth, depth, depth, 1.0);
}
Loại chiếu bạn đang sử dụng? Nếu bạn sử dụng phép chiếu chính xác khi hiển thị bản đồ độ sâu, bạn sẽ nhận được những gì bạn cần mà không có bất kỳ phép tính nào. – Ani
Tôi đang thực hiện phép chiếu phối cảnh khi hiển thị, nhưng tôi cần các giá trị độ sâu đến từ phép chiếu chính xác. – Lucian