|
|
|
@ -689,6 +689,20 @@ static inline void rotate_cube_face_inverse(float *uf, float *vf, int rotation) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Normalize vector. |
|
|
|
|
* |
|
|
|
|
* @param vec vector |
|
|
|
|
*/ |
|
|
|
|
static void normalize_vector(float *vec) |
|
|
|
|
{ |
|
|
|
|
const float norm = sqrtf(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); |
|
|
|
|
|
|
|
|
|
vec[0] /= norm; |
|
|
|
|
vec[1] /= norm; |
|
|
|
|
vec[2] /= norm; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Calculate 3D coordinates on sphere for corresponding cubemap position. |
|
|
|
|
* Common operation for every cubemap. |
|
|
|
@ -704,7 +718,6 @@ static void cube_to_xyz(const V360Context *s, |
|
|
|
|
float *vec) |
|
|
|
|
{ |
|
|
|
|
const int direction = s->out_cubemap_direction_order[face]; |
|
|
|
|
float norm; |
|
|
|
|
float l_x, l_y, l_z; |
|
|
|
|
|
|
|
|
|
uf /= (1.f - s->out_pad); |
|
|
|
@ -745,10 +758,11 @@ static void cube_to_xyz(const V360Context *s, |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z); |
|
|
|
|
vec[0] = l_x / norm; |
|
|
|
|
vec[1] = l_y / norm; |
|
|
|
|
vec[2] = l_z / norm; |
|
|
|
|
vec[0] = l_x; |
|
|
|
|
vec[1] = l_y; |
|
|
|
|
vec[2] = l_z; |
|
|
|
|
|
|
|
|
|
normalize_vector(vec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1396,16 +1410,12 @@ static void stereographic_to_xyz(const V360Context *s, |
|
|
|
|
const float x = z * (2.f * i / width - 1.f); |
|
|
|
|
const float y = z * (2.f * j / height - 1.f); |
|
|
|
|
const float xy = x * x + y * y; |
|
|
|
|
float norm; |
|
|
|
|
|
|
|
|
|
vec[0] = 2.f * x / (1.f + xy); |
|
|
|
|
vec[1] = (-1.f + xy) / (1.f + xy); |
|
|
|
|
vec[2] = 2.f * y / (1.f + xy); |
|
|
|
|
|
|
|
|
|
norm = sqrtf(vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]); |
|
|
|
|
vec[0] /= norm; |
|
|
|
|
vec[1] /= norm; |
|
|
|
|
vec[2] /= norm; |
|
|
|
|
normalize_vector(vec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1555,7 +1565,6 @@ static void eac_to_xyz(const V360Context *s, |
|
|
|
|
int u_face, v_face, face; |
|
|
|
|
|
|
|
|
|
float l_x, l_y, l_z; |
|
|
|
|
float norm; |
|
|
|
|
|
|
|
|
|
float uf = (float)i / width; |
|
|
|
|
float vf = (float)j / height; |
|
|
|
@ -1629,10 +1638,11 @@ static void eac_to_xyz(const V360Context *s, |
|
|
|
|
av_assert0(0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z); |
|
|
|
|
vec[0] = l_x / norm; |
|
|
|
|
vec[1] = l_y / norm; |
|
|
|
|
vec[2] = l_z / norm; |
|
|
|
|
vec[0] = l_x; |
|
|
|
|
vec[1] = l_y; |
|
|
|
|
vec[2] = l_z; |
|
|
|
|
|
|
|
|
|
normalize_vector(vec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1735,11 +1745,11 @@ static void flat_to_xyz(const V360Context *s, |
|
|
|
|
const float l_y = -s->flat_range[1] * (2.f * j / height - 1.f); |
|
|
|
|
const float l_z = s->flat_range[2]; |
|
|
|
|
|
|
|
|
|
const float norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z); |
|
|
|
|
vec[0] = l_x; |
|
|
|
|
vec[1] = l_y; |
|
|
|
|
vec[2] = l_z; |
|
|
|
|
|
|
|
|
|
vec[0] = l_x / norm; |
|
|
|
|
vec[1] = l_y / norm; |
|
|
|
|
vec[2] = l_z / norm; |
|
|
|
|
normalize_vector(vec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -1833,7 +1843,6 @@ static void barrel_to_xyz(const V360Context *s, |
|
|
|
|
const int eh = height / 2; |
|
|
|
|
|
|
|
|
|
float uf, vf; |
|
|
|
|
float norm; |
|
|
|
|
|
|
|
|
|
if (j < eh) { // UP
|
|
|
|
|
uf = 2.f * (i - 4 * ew) / ew - 1.f; |
|
|
|
@ -1856,17 +1865,13 @@ static void barrel_to_xyz(const V360Context *s, |
|
|
|
|
l_y = -1.f; |
|
|
|
|
l_z = vf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
norm = sqrtf(l_x * l_x + l_y * l_y + l_z * l_z); |
|
|
|
|
|
|
|
|
|
l_x /= norm; |
|
|
|
|
l_y /= norm; |
|
|
|
|
l_z /= norm; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vec[0] = l_x; |
|
|
|
|
vec[1] = l_y; |
|
|
|
|
vec[2] = l_z; |
|
|
|
|
|
|
|
|
|
normalize_vector(vec); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|