在我的 GLSurfaceView.Renderer 中,我将场景分为两部分。第一组偏移和旋转,而第二组与“相机”对齐,所以我应用 glRotate 和 glTranslate,然后应用完全相反的 glTranslate 和 glRotate。在某些设备上,这可以正常工作,但在其他设备上,整个场景会慢慢地偏离“中心”。
这是 onDraw() 函数:
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// rotate card table
gl.glRotatef(-20f, 1f, 0f, 0f);
gl.glRotatef( 5f, 0f, 1f, 0f);
gl.glRotatef(-10f, 0f, 0f, 1f);
gl.glTranslatef( 1f, 3f, 0f);
mDeck.draw(gl);
// undo rotate for buttons/overlays
gl.glTranslatef(-1f, -3f, 0f);
gl.glRotatef( 10f, 0f, 0f, 1f);
gl.glRotatef( -5f, 0f, 1f, 0f);
gl.glRotatef( 20f, 1f, 0f, 0f);
mOverlayBtns.draw(gl);
mPass.draw(gl);
}
完整的源代码可以在 GitHub 上找到,这里。
我有什么明显的遗漏吗?有没有更好的方法来处理旋转,然后旋转回来?
到目前为止,我已经注意到这个问题:
- 连结 4
- HTC 感觉
- 另一部我不记得名字的 LG 手机
这些设备没有显示问题:
- 银河连结
- 连结 7
- Xoom