Поворот окна просмотра Android OpenGL ES 2.0 - PullRequest
0 голосов
/ 04 марта 2011

Контекст рендеринга OpenGL ES 2.0, который я получаю для своего приложения для Android, находится в портретном режиме (480x800), но я хочу рендерить в ландшафтном режиме (800x480).

Как можно вращать область просмотра OpenGL, предпочтительнобез изменения матриц, отправляемых в шейдеры?

У меня есть куча шейдеров, некоторые из которых используют тождественные матрицы (например, средство визуализации шрифтов).Похоже, мне нужно будет добавить компонент вращения в матрицах в нескольких местах.Есть ли способ как-то глобально повернуть область просмотра?

Можно ли как-то запросить контекст рендеринга ландшафта у Android?

Есть ли какие-либо шаблоны архитектуры для этой проблемы?

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Решил проблему, добавив <activity android:screenOrientation="landscape" ....Это заставляет OpenGL использовать альбомную ориентацию.

0 голосов
/ 04 марта 2011

Я делаю две вещи в своих приложениях. Во-первых, измените эту строку в файле манифеста:

<activity android:name=".YourActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation">

Это остановило его от повторной инициализации всего при вращении. Во-вторых, переопределите эту функцию в своем производном классе GLSurfaceView.Renderer:

public void onSurfaceChanged(GL10 gl10, int width, int height) 
{
    gl10.viewport(0, 0, width, height);

    //setup your matrices here
}

Это настроит ваш порт просмотра, но вам придется обновить там и свои матрицы, чтобы учесть новую геометрию экрана. Вам на самом деле не нужно добавлять дополнительное вращение к вашим матрицам, просто переустановите матрицу проекта в методе onSurfaceChanged.

НТН.

...