我正在用 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");
}
任何想法如何解决这个问题?非常感谢
(顺便说一句,如果我画一个立方体而不是一个球体,一切都很好)