Я пытаюсь создать небольшую демоверсию VR с QT и OpenGL-ES для Google Картона, используя смещение вершин, как описано here.
Короткий: Это в своей работе применяет коричневый Конради модель для каждого Vertice, чтобы противодействовать искажению Lense с следующей формулой:Коррекция искажений с использованием вершинного смещения
х/y_distorted = х/y_undistorted * (1,0 + К1 * г^2 + К2 * г^4)
В качестве коэффициентов я получил K1 = -0.55 и K2 = 0.34 из исходного кода java для gvr.
Вот соответствующий Shader код:
vec4 tmp = vec4(a_position,1.0);
tmp = uMVMat * tmp; //Applying the ModelView Matrix
float r2 = dot(tmp.xy,tmp.xy); //Calculating the squared radius
tmp.xy *= 1.0f + (-0.55+0.34*r2)*r2; //Applying the Formula to x and y
gl_Position = uPMat * tmp;
Это приводит к следующей картине при отображении плоскости: Distorted Plane
Что я делаю не так? Я даже попытался заменить коэффициенты, инвертируя их ... Я всегда получаю только какое-то искажение пинчсуссии.