inline vector3 cube_map_normal()

in roboschool/cpp-household/glsl/nv_math.inl [1782:1826]


inline vector3<T> cube_map_normal(int i, int x, int y, int cubesize)
{
    vector3<T> v;
    T s, t, sc, tc;
    s = (T(x) + T(0.5)) / T(cubesize);
    t = (T(y) + T(0.5)) / T(cubesize);
    sc = s * nv_two - T(1);
    tc = t * nv_two - T(1);

    switch (i) 
    {
        case 0:
            v.x = T(1);
            v.y = -tc;
            v.z = -sc;
            break;
        case 1:
            v.x = -T(1);
            v.y = -tc;
            v.z = sc;
            break;
        case 2:
            v.x = sc;
            v.y = T(1);
            v.z = tc;
            break;
        case 3:
            v.x = sc;
            v.y = -T(1);
            v.z = -tc;
            break;
        case 4:
            v.x = sc;
            v.y = -tc;
            v.z = T(1);
            break;
        case 5:
            v.x = -sc;
            v.y = -tc;
            v.z = -T(1);
            break;
    }
    v.normalize();
    return v;
}