我在Android中制作了一个带有Cardboard SDK的360媒体播放器(实际上我使用的是新的GoogleVR SDK,但它的工作方式非常相似)。要执行此操作,请遵循this代码:
单眼视觉和未扭曲时的立体视觉效果都很好(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");
}
任何想法如何解决这个问题?非常感谢
(顺便说一句,如果我画一个立方体而不是一个球体,一切都很好)
答案 0 :(得分:0)
好吧,差不多2个月后我终于解决了我的问题。如果有人想知道如何,这不是gvr的问题,而是我如何初始化我的场景。基本上我将Sphere构造函数中的每个工作移动到draw方法但是着色器初始化。