GLSL. Ai đó có thể giải thích tại sao gl_FragCoord.xy / screenSize được thực hiện không và vì lý do gì?


13

Tôi chưa quen với shader và biết rằng bạn có thể tô màu pixel bằng gl_FragColor nhưng đôi khi có điều này:

vec2 uv = gl_FragCoord.xy / screenSize; // or resolution or smthn depends on the implementation

Nếu gl_FragCoord giống như tọa độ pixel, thì uv nhận được gì?

Tại sao nó thường được thực hiện trong GLSL?

Nếu ai đó thậm chí có thể rút ra một ví dụ về phần nào của màn hình sẽ là UV thì nó sẽ rất hữu ích!


Điều quan trọng cần lưu ý là giai đoạn Rasterization trước khi Fragment Shader tùy chọn thực hiện phép nội suy thuộc tính đoạn chuyển đổi khung nhìn cho gl_FragCoordthuộc tính.
Matthias

Câu trả lời:


21

Đầu tiên, gl_FragCoord.xylà tọa độ không gian màn hình của pixel hiện tại dựa trên kích thước khung nhìn. Vì vậy, nếu kích thước khung nhìn là width=5, height=4thì mỗi đoạn chứa:

nhập mô tả hình ảnh ở đây

Tại sao cần uvs? Ví dụ, tôi kết xuất hình học cho màn hình quad và sau đó tôi cần áp dụng một số xử lý hậu kỳ trên quad này trong một đường chuyền kết xuất khác. Để lấy mẫu từ bộ tứ đó tôi cần tọa độ kết cấu trong phạm vi [0, 1]. Vì vậy, để tính toán chúng tôi thực hiện phân chia gl_FragCoord.xy / viewPortSize.


Có thể nói rằng GL_TEXTURE_RECTANGLE_ARBkhông sử dụng tọa độ chuẩn hóa, nhưng GL_TEXTURE_*Dkết cấu thì có.
dùng1118321

1

Tham khảo câu trả lời tuyệt vời của narthex để biết chi tiết và ví dụ, nhưng chỉ cần đặt,

Nếu bạn muốn ánh xạ các giá trị tọa độ pixel thành phạm vi 0 đến 1 , bạn chia cho viewPortSize.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.