2017-01-29 7 views
0

hereのように、頂点変位を使用してGoogleのCardboard用のQTとOpenGL-ESで小さなVRデモを作成しようとしています。ショート
は:頂点変位を使用した歪み補正

X/y_distorted = X/y_undistorted *(1.0 + K1 * R^2 + K2 * R^4:それは次の式でlense歪みを打ち消すために、すべての頂点に褐色コンラディモデルapplys )

係数として、私はgvrのJavaソースコードからK1 = -0.55とK2 = 0.34を得ました。ここで
は、関連するシェーダコードです:

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に基づいて、あなたがz^2。 Otherバレル歪みの方法は、NDC空間を想定しています。ピンクッション歪みは、だからあなたの係数は[OK]をする必要があり、正の値

を持つことになり、一方、

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

またwikiページをに従って

バレル歪みは通常、K1のための負の期間を持つことになります。

関連する問題