在这个例子中谷歌vr应用双目失真?

时间:2016-10-26 22:55:12

标签: android rendering virtual-reality google-vr

我正在为谷歌纸板开发一个应用程序,它将流式传输两个视频,每个视频一个,以模拟3D视觉。我只打算使用google vr sdk来模拟将应用于每个帧的双目失真,但是this example哪个函数实际应用失真还不清楚。

/**
 * Draws a frame for an eye.
 *
 * @param eye The eye to render. Includes all required transformations.
 */
@Override
public void onDrawEye(Eye eye) {
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
    ...
    // Apply the eye transformation to the camera.
    Matrix.multiplyMM(mView, 0, eye.getEyeView(), 0, mCamera, 0);

    // Set the position of the light
    Matrix.multiplyMV(mLightPosInEyeSpace, 0, mView, 0, LIGHT_POS_IN_WORLD_SPACE, 0);

    // Build the ModelView and ModelViewProjection matrices
    // for calculating cube position and light.
    float[] perspective = eye.getPerspective(Z_NEAR, Z_FAR);
    Matrix.multiplyMM(mModelView, 0, mView, 0, mModelCube, 0);
    Matrix.multiplyMM(mModelViewProjection, 0, perspective, 0, mModelView, 0);
    drawCube();

    // Draw the rest of the scene.
    ...
}

此代码段的描述如下:

  

这是一系列事件:

     
      
  • 宝藏进入了眼睛空间。
  •   
  • 我们应用投影矩阵。这提供了为指定眼睛渲染的场景。
  •   
  • Google VR SDK会自动应用失真,以渲染最终场景。
  •   

然而,实际上没有解释第三步。由于我不是渲染和图像,只是使用现实生活中的视频,我只需要使用应用失真的部分代码,但是我不清楚这究竟是怎么发生的。

如果有任何想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

public Distortion getApproximateInverseDistortion(float maxRadius,int numCoefficients)

使用最小二乘拟合系数构建反扭曲对象。

这是为了实现应用程序端自定义失真。在返回的对象上使用.getCoefficients()来检索逆失真函数的系数。

这是近似的逆,并且在返回的对象上使用.distort()将比在原始对象上使用distortInverse()方法更快但不太准确。对于有用的结果,输入失真必须在0..maxRadius范围内表现良好。

50度半角FOV(总共100度)的示例,这将产生反向失真,其中inverse.distort(r)近似等于在r = 0 ... maxFovHalfAngle范围内的distortion.distortInverse(r)。< / p>

更多信息:https://developers.google.com/vr/android/reference/com/google/vr/sdk/base/Distortion

https://www.baekdal.com/insights/why-pretty-much-all-360-vr-videos-get-it-wrong