cubemap.slang

cross platform rendering playground

src/shaders/ibl/cubemap.slang

710 B
#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);
}