Отразить ось Y в OpenGL ES?

Я пытаюсь сделать орфографический режим с OpenGL ES, а точка (0,0) находится в нижнем левом углу экрана. Однако я хочу сделать это в верхнем левом углу.

Вот где я настраиваю вещи в своем приложении для Android:

public void onSurfaceChanged(final GL10 gl, final int width, final int height) { assert gl != null; // use orthographic projection (no depth perception) GLU.gluOrtho2D(gl, 0, width, 0, height); } 

Я попытался изменить вышеупомянутый вызов разными способами, в том числе:

  GLU.gluOrtho2D(gl, 0, width, 0, height); GLU.gluOrtho2D(gl, 0, width, 0, -height); GLU.gluOrtho2D(gl, 0, width, height, 0); GLU.gluOrtho2D(gl, 0, width, -height, 0); 

Я также попытался сыграть в окне просмотра безрезультатно:

 public void onSurfaceChanged(final GL10 gl, final int width, final int height) { assert gl != null; // define the viewport gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); // use orthographic projection (no depth perception) GLU.gluOrtho2D(gl, 0, width, 0, height); } 

И снова я попробовал играть с настройками видового экрана безрезультатно:

  gl.glViewport(0, 0, width, height); gl.glViewport(0, 0, width, -height); gl.glViewport(0, height, width, 0); gl.glViewport(0, -height, width, 0); 

Любые подсказки о том, как получить точку (0,0) в верхнем левом углу экрана? Благодаря!

Как насчет:

 glViewport(0, 0, width, height); gluOrtho2D(0, width, height, 0); 

Вызов glViewport устанавливает только окно просмотра в координатах устройства. Это зависит от вашей оконной системы. Вызов glOrtho (gluOrtho2D) устанавливает сопоставление координат из координат мира в координаты устройства.

Видеть:

Как насчет glScalef(1f, -1f, 1f); ?

 double fov = 60.f * 3.1415f/180.f; float aspect = (float) width / (float) height; float zNear = 0.01f; float zFar = 3000.0f; // cotangent float f = (float) (Math.cos(fov*0.5f) / Math.sin(fov*0.5f)); float perspMtx[] = new float[16]; // columns first for( int i=0; i<16; ++i ) perspMtx[i] = 0.0f; perspMtx[0] = f / aspect; perspMtx[5] = -f; // flip Y? <- THIS IS YOUR ANSWER perspMtx[10] = (zFar+zNear) / (zNear - zFar); perspMtx[11] = -1.0f; perspMtx[14] = 2.0f*(zFar*zNear) / (zNear - zFar); gl.glMultMatrixf(perspMtx, 0); 

Это решило проблему для меня, должно быть схоже для матрицы ортогональных проекций

Intereting Posts
Как получить завершающий ответ на setImageUrl с библиотекой Volley и NetworkImageView? Как я могу сделать изображение прозрачным на Android? Ошибка Gradle 0.9. + / 0.9.2: невозможно загрузить класс 'com.android.builder.testing.api.DeviceProvider' Отправленные / доставленные SMS: как вы определяете, к каким SMS-вещам принадлежит? Не удалось найти информацию о провайдере для ContentProvider. "403 – usageLimits" на youtube api Как работать с новыми классами, будучи обратно совместимым в Android? Android: подсказка Spinner Принудительное обновление приложения через рынок, как будто пользователь нажимает «Обновить» Как отправить файл kml в Google Earth, например MyTracks (с открытым исходным кодом)? Как исправить предупреждение «не может найти ссылочный класс» в Android Eclipse ProGuard Rule? Закусочная в определенном фрагменте Выпадающее меню HTML пуст в леденце на Android Идентификатор устройства. Значение null Внедрение Google Analytics V4 с использованием продуктов