Không có ý nghĩa gì trong bối cảnh của OpenGL trong bối cảnh OpenGL?


18

Tôi đã thấy thuật ngữ này stxuất hiện một vài lần khi nhìn vào các shader mảnh vỡ OpenGL khác. Tuy nhiên, tôi không biết nó dùng để làm gì hay dùng để làm gì. Đây là một ví dụ:

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

Tôi có thể hiểu rằng điều này đang chuyển đổi tọa độ pixel thành tọa độ chuẩn hóa là 0,0 - 1,0 thay vì 640 x 480 (ví dụ).

Tôi cũng đã thấy những thứ như position.st.

Nó có nghĩa là gì?

Câu trả lời:


23

Tên chung cho các thành phần của tọa độ kết cấu là U và V. Tuy nhiên, vì chữ cái tiếp theo được sử dụng (cho kết cấu 3D) là W, gây ra xung đột với tên của các thành phần của vị trí : X, Y, Z và W .

Để tránh những xung đột như vậy, quy ước của OpenGL là các thành phần của tọa độ kết cấu được đặt tên là S, T và R. Do đó, bạn có các lệnh gọi hàm như thế này:

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

Trong đó GL_TEXTURE_WRAP_Sđề cập đến việc bọc trong thành phần S của tọa độ kết cấu.

Thật không may, OpenGL đã chọn S, T và R từ lâu trước khi mặt nạ GLSL và swizzle xuất hiện. R, tất nhiên, xung đột với R , G, B và A. Để tránh những xung đột đó, trong GLSL, mặt nạ kết hợp swizzle sử dụng S, T, P và Q.

Trong GLSL, bạn có thể chuyển đổi với XYZW, STPQ hoặc RGBA. Tất cả đều có nghĩa chính xác cùng một điều. Như vậy position.stlà chính xác như position.xy. Tuy nhiên, bạn không được phép kết hợp mặt nạ swizzle từ các bộ khác nhau. Vì vậy, position.xtkhông được phép.

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.