我试图使用顶点位移为谷歌纸板创建一个带有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
我做错了什么?我甚至试过交换系数,反转它们......我总是得到某种类型的震荡变形..
答案 0 :(得分:1)
仅仅基于Cardboard Distortion vertex shader,您似乎错过了除以z ^ 2的投影步骤。桶形失真的Other方法假设NDC空间。
// should be
float r2 = dot(tmp.xy,tmp.xy)/(z*z);
另外根据维基页面
桶形失真通常对K1有负值,而枕形失真则为正值
所以你的系数应该没问题。