0

我正在用 Android 中的 Cardboard SDK 制作一个 360 度媒体播放器(实际上我使用的是新的 GoogleVR SDK,但它的工作原理非常相似)。为此,我遵循以下代码

单眼视觉和立体视觉在不失真时一切都很好(cardboardView.setDistortionCorrectionEnabled(false))。但是当我尝试使用失真校正时,它会得出这样的结论:

在此处输入图像描述

我在 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");

}

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

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

4

1 回答 1

0

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

于 2016-09-06T12:47:45.737 回答