В моем GLSurfaceView.Renderer я рисую свою сцену в двух частях. Первая группа смещена и повернута, а вторая выровнена с «камерой», поэтому я применяю glRotate и glTranslate, а затем применяю точные противоположные glTranslate и glRotate. На некоторых устройствах это работает отлично, но на других, вся сцена медленно вращается с «центра».
Images: At start and After ~5 mins
Вот функция 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);
}
The full source can be found on GitHub, here.
Есть ли что-то очевидное, что мне не хватает? Есть ли лучший способ справиться с вращением, а затем вернуться назад?
До сих пор я заметил эту проблему:
- Nexus 4
- HTC Sensation
- Другой телефон LG, имя которого я не могу запомнить
Эти устройства не показывают проблемы:
- Galaxy Nexus
- Nexus 7
- Xoom