使用纸板

时间:2016-07-18 09:03:27

标签: java android opengl-es google-cardboard 360-degrees

我在Android中制作了一个带有Cardboard SDK的360媒体播放器(实际上我使用的是新的GoogleVR SDK,但它的工作方式非常相似)。要执行此操作,请遵循this代码:

单眼视觉和未扭曲时的立体视觉效果都很好(cardboardView.setDistortionCorrectionEnabled(false))。但是当我尝试使用失真校正时,它会得出这个:

enter image description here

我在GVR API中发现了这一点:

  

如果启用了失真校正,则GL上下文将设置为绘制   进入这个调用时由纹理支持的帧缓冲区,所以如果   实现者需要为某些渲染阶段更改帧缓冲区   然后,实现者必须将帧缓冲区重置为获得的帧缓冲区   之后通过glGetIntegerv(GL_FRAMEBUFFER_BINDING,......)。

但我不确定这是否相关。

这是我的onDrawEye代码:

 /**
 * 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);
    Matrix.multiplyMM(mView, 0, eye.getEyeView(), 0, mCamera, 0);
    Matrix.multiplyMM(mViewProjectionMatrix, 0, mProjectionMatrix, 0, mView, 0);

    mSphere.draw(mViewProjectionMatrix);

    checkGLError("onDrawEye");

}

任何想法如何解决这个问题?非常感谢

(顺便说一句,如果我画一个立方体而不是一个球体,一切都很好)

1 个答案:

答案 0 :(得分:0)

好吧,差不多2个月后我终于解决了我的问题。如果有人想知道如何,这不是gvr的问题,而是我如何初始化我的场景。基本上我将Sphere构造函数中的每个工作移动到draw方法但是着色器初始化。