Ok, trong trình đổ bóng đoạn GLSL của tôi, tôi muốn có thể tính toán khoảng cách của đoạn từ một dòng cụ thể trong không gian.Cách tính gl_FragCoord trong glsl
Kết quả của việc này là tôi đang đầu tiên cố gắng sử dụng một bộ vec2 khác nhau trong vertex shader của tôi để phản ánh những gì kết thúc trong gl_FragCoord
:
varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;
Bây giờ trong shader đoạn tôi mong đợi:
gl_FragCoord.xy==fake_frag_coord
Nhưng không. Đường ống nào hoạt động theo cách nào trên gl_Position
để biến nó thành gl_FragCoord
mà tôi đang bỏ qua để thực hiện trên fake_frag_coord
?
Tôi đã sai về bạn là sai, nhưng phải về việc sử dụng gl_ModelViewProjectionMatrix * gl_Vertex có khả năng giới thiệu lỗi tính toán. – karx11erx
Nitpick: điều đó thực sự sẽ cung cấp cho bạn tọa độ không gian thay vì tọa độ thiết bị chuẩn hóa, vì bạn không thực hiện phân chia phối cảnh xảy ra trong quá trình rasterisation (giữa đổ bóng đỉnh và đổ bóng). http://www.glprogramming.com/red/chapter03.html#name1 – Pike65
@ Pike65 Đó không chỉ là một nitpick, nó sẽ dẫn đến các giá trị hoàn toàn khác nhau cho phép chiếu phối cảnh. –