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;
}