Главная » Разработка для Android » Графика OpenGL в Android приложении

0

 

Платформа Android поддерживает графику OpenGL примерно так же, как шляпа-цилиндр помогает вытаскивать кроликов. Хотя OpenGL – бесспорно, одна из самых захватывающих технологий в Android, она играет в этой операционной системе довольно маргинальную роль. Кроме того, создается впечатление, что еще до выхода окончательной бета-версии интерфейс претерпел крупные изменения. Большая часть кода и многие рекомендации на эту тему, найденные нами в Вебе, устарели и уже не работают.

В версии API Vl_r2 реализована среда OpenGL ES 1.0 и большей частью ES 1.1. В сущности, это доменно-специфичный язык, интегрированный в Java. Если вам хотя бы недолго приходилось разрабатывать игровые пользовательские интерфейсы, вы привыкнете к разработке программ с OpenGL для Android быстрее, чем программист Java или даже эксперт по пользовательским интерфейсам Java.

Перед тем как перейти к обсуждению самой графической библиотеки OpenGL, давайте ненадолго обратимся к вопросу о том, как именно OpenGL рисует пикселы, которые отображаются на экране. До сих пор рассматривался сложный фреймворк View, используемый для организации и представления объектов на экране. OpenGL – это язык, на котором приложение описывает целую сцену. Такая сцена будет отображаться движком, который находится не просто за пределами виртуальной машины Java, но и вообще может работать на другом процессоре (имеется в виду графический процессор или GPU). Скоординировать на экране отображение двух видов, обрабатываемых разными процессорами, довольно непросто.

Класса SurfaceView, рассмотренного выше, для этого почти достаточно. Его задача – создавать поверхность, на которой может рисовать иной поток, кроме графического потока пользовательского интерфейса. Нам очень пригодился бы инструмент, представляющий собой расширение SurfaceView, который бы чуть лучше поддерживал многопоточность, а также обеспечивал поддержку OpenGL.

Оказывается, что именно такой инструмент уже есть. Все демонстрационные приложения, входящие в состав дистрибутива Android SDK и использующие при работе анимацию на основе OpenGL, работают с применением вспомогательного класса GLSurfaceView. Поскольку демонстрационные приложения, написанные самими создателями Android, используют этот класс, мы советуем рассмотреть возможность его применения и в ваших программах.

GLSurfaceView определяет интерфейс GLSurfaceView. Renderer, который радикально упрощает всю работу, связанную с OpenGL и GLSurfaceView. На самом же деле весь этот функционал исключительно сложен. GLSurfaceView вызывает метод отображения getConf і gSpec для получения информации о конфигурации OpenGL. Еще два метода – sizeChanged и surfaceCreated – вызываются GLSurfaceView для того, чтобы сообщить средству отображения (рендереру) соответственно, что его размер изменился или что нужно подготовиться к рисованию. Наконец drawFrame, центральная часть интерфейса, вызывается для отображения нового кадра OpenGL.

В примере 9.16 показаны важные методы из реализации средства отображения OpenGL.

Пример 9.16. Покадровая анимация с применением OpenGL

Метод surfaceCreated готовит сцену. Он задает несколько атрибутов OpenGL, которые должны инициализироваться только в том случае, когда виджет получает новую рисовальную поверхность. Кроме того, этот метод вызывает і nit Image, который считывает ресурс точечного рисунка (bitmap resource) и сохраняет его в виде двухмерной текстуры. Когда наконец вызывается drawFrame, все уже готово для рисования. А именно: текстура применена к плоской фигуре, вершины которой задаются конструктором в vertexBuf, фаза анимации выбрана, и сцена перерисовывается.

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии