使用顶点位移进行失真校正

时间:2017-01-29 17:24:21

标签: opengl-es glsl google-cardboard virtual-reality

我试图使用顶点位移为谷歌纸板创建一个带有QT和OpenGL-ES的小型VR演示,如http://mongoosejs.com/docs/api.html所述。
简短:它将棕色conrady模型应用于每个顶点,以通过以下公式抵消镜头失真:

  

x / y_distorted = x / y_undistorted *(1.0 + K1 * r ^ 2 + K2 * r ^ 4)

作为系数,我从gvr的java源代码得到K1 = -0.55和K2 = 0.34。
以下是相关的Shader代码:

\x80

渲染平面时会产生以下图片: here

我做错了什么?我甚至试过交换系数,反转它们......我总是得到某种类型的震荡变形..

1 个答案:

答案 0 :(得分:1)

仅仅基于Cardboard Distortion vertex shader,您似乎错过了除以z ^ 2的投影步骤。桶形失真的Other方法假设NDC空间。

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

另外根据维基页面

  

桶形失真通常对K1有负值,而枕形失真则为正值

所以你的系数应该没问题。