2017-01-29 5 views
0

Я пытаюсь создать небольшую демоверсию 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

Что я делаю не так? Я даже попытался заменить коэффициенты, инвертируя их ... Я всегда получаю только какое-то искажение пинчсуссии.

ответ

1

Просто на основе искажения картонного кода vertex shader похоже, что вам не хватает шага проекции, на котором вы делите на г^2. Other Методы искажения ствола предполагают пространство NDC.

// should be 
float r2 = dot(tmp.xy,tmp.xy)/(z*z); 

согласно Кроме вики-страницу

Ствол искажения, как правило, будет иметь негативный термин для K1, тогда как подушечка искажение будет иметь положительное значение

Так что ваши коэффициенты должны быть в порядке.

Смежные вопросы