Применение проекций и камер

Проекции и камеры в среде OpenGL предоставляют способ рисования объектов, который больше напоминает то, как вы видите физические объекты глазами. Эта симуляция физического зрения строится на математических методах преобразования координат объекта:

  • Проекция – это преобразование регулирует координаты объекта, основываясь на ширине и высоте контейнера GLSurfaceView, в котором они нарисованы. Без этой трансформации объекты сжимаются и выглядят непропорциональными в окне просмотра. Преобразование проекции применятеся только при установке и изменении пропорций контейнера в методе onSurfaceChanged(). За подробной информацией о проекции и подсчете координат, обращайтесь в раздел Подсчет координат для графических объектов.
  • Камеры – это преобразование регулирует координаты, основываясь на позиции виртуальной камеры. Важно помнить, что OpenGL не описывает фактический объект камеры, но предоставляет методы для симуляции камеры и преобразования объектов на экране. Преобразование с помощью камеры может быть рассчитано однократно при добавлении объекта GLSurfaceView, или многократно, динамично меняя картинку в ответ на действия пользователя.

В уроке описывается способ создания проекции и камеры и их применение при рисовании фигур в контейнере GLSurfaceView.

Описание проекции

Данные для проекции рассчитываются в методе onSurfaceChanged() класса GLSurfaceView.Renderer. В следующем примере мы берем высоту и ширину контейнера GLSurfaceView и используем их для заполнения матрицы преобразования проекции – объекта типа Matrix в методе Matrix.frustumM():

Этот код заполняет матрицу проекции mProjectionMatrix, которую вы можете сочетать с преобразованием камеры в методе onDrawFrame(), о нем сказано ниже.

Примечание: простое применение преобразования проекции к графическому объекту приведет к пустому экрану. В целом, вы должны также применять камеру для того, чтобы что-то отобразить.

Описание камеры

Добавим преобразование вашего объекта с помощью камеры. В следующем примере, камера рассчитывается с помощью метода Matrix.setLookAtM(), а затем сочетается с расчетами проекции из предыдущего раздела. Затем скомбинированное преобразование передается для рисования фигуры:

Применение проекции и камеры

Чтобы использовать комбинированные преобразования проекции и камеры из предыдущего раздела урока, измените метод draw() вашего графического объекта для применения их к фигуре:

После корректного расчета и применения преобразования проекции и камеры, графический объект будет иметь правильные пропорции и выглядеть примерно так:

Рисунок 1. вид треугольника при использовании проекции и камеры

Теперь, когда приложение отображает фигуры в правильной пропорции, самое время добавить немного движения.

Добавить комментарий