#pragma once
vec3 CubemapFaceDirection(u32 face, vec2 uv) {
// top-left origin, flip V so 0 is at the bottom of the face
vec2 p = vec2(uv.x, 1.0 - uv.y) * 2.0 - 1.0;
vec3 dir;
switch (face) {
case 0:
dir = vec3(1.0, -p.y, -p.x);
break; // +X (Right)
case 1:
dir = vec3(-1.0, -p.y, p.x);
break; // -X (Left)
case 2:
dir = vec3(p.x, 1.0, p.y);
break; // +Y (Top)
case 3:
dir = vec3(p.x, -1.0, -p.y);
break; // -Y (Bottom)
case 4:
dir = vec3(p.x, -p.y, 1.0);
break; // +Z (Front)
default:
dir = vec3(-p.x, -p.y, -1.0);
break; // -Z (Back)
}
return normalize(dir);
}