OpenGL — это API для написания 2D и 3D графики, которая отображается на GPU. Это высвободит драгоценные вычислительные ресурсы на процессоре, которые будут использоваться для более сложной физики или большего количества объектов или чего-либо, не связанного с графикой.
Есть несколько понятий, которые необходимо понять, но я представлю их, когда мы столкнемся с ними в ходе курса.
Если вы следили за статьями, относящимися к отображению графики на устройстве Android, вы уже знаете, что для отображения графических элементов нам нужны поверхность и средство визуализации. Мы использовали базовый SurfaceView, из которого получили Canvas, и нарисовали на нем все, вызвав поддерживаемый метод draw из нашего игрового цикла.
Использование OpenGL мало чем отличается. Android поставляется с специальной реализацией интерфейса SurfaceView для отображения изображений, отображаемых OpenGL.
Давайте создадим проект Android обычным способом.
Я называю деятельность просто Run . Проверьте, что сгенерировал мастер, и он должен выглядеть так:
| 1 2 3 4 5 6 7 8 | publicclassRun extendsActivity {    /** Called when the activity is first created. */    @Override    publicvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }} | 
Ничего особенного.
Создание рендерера OpenGL
Давайте построим рендерер. Создайте класс GlRenderer, который реализует интерфейс android.opengl.GLSurfaceView.Renderer .
Это будет выглядеть так:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | importjavax.microedition.khronos.egl.EGLConfig;importjavax.microedition.khronos.opengles.GL10;importandroid.opengl.GLSurfaceView.Renderer;publicclassGlRenderer implementsRenderer {    @Override    publicvoidonDrawFrame(GL10 gl) {    }    @Override    publicvoidonSurfaceChanged(GL10 gl, intwidth, intheight) {    }    @Override    publicvoidonSurfaceCreated(GL10 gl, EGLConfig config) {    }} | 
Нам необходимо реализовать вышеупомянутые 3 метода. В настоящее время они пусты и ничего не делают.
Методы
onSurfaceCreated (GL10 gl, EGLConfig config) создан или создан заново . Важно иметь в виду воссозданный бит, поскольку это означает, что каждый раз, когда устройство, например, засыпает и просыпается, поверхность воссоздается. Поскольку контекст, содержащий ресурсы, также разрушается, это место, где мы будем загружать наши ресурсы (изображения для текстур и т. Д.).
onSurfaceChanged (GL10 gl, int width, int height) вызывается всякий раз, когда изменяется размер поверхности. Это в основном влияет на нашу область просмотра. Окно просмотра — это просто прямоугольная область, через которую мы видим наш игровой мир.
onDrawFrame (GL10 gl) вызывается потоком рендеринга для рисования каждого кадра. Это где все рисование происходит. Нам не нужно называть это явно. Поток рендеринга создан для нас Android, и это будет называться.
Давайте переключимся на рендерер OpenGL. Проверьте новую активность Run .
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | packagenet.obviam.opengl;importandroid.app.Activity;importandroid.opengl.GLSurfaceView;importandroid.os.Bundle;importandroid.view.Window;importandroid.view.WindowManager;publicclassRun extendsActivity {    /** The OpenGL view */    privateGLSurfaceView glSurfaceView;    /** Called when the activity is first created. */    @Override    publicvoidonCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // requesting to turn the title OFF        requestWindowFeature(Window.FEATURE_NO_TITLE);        // making it full screen        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                WindowManager.LayoutParams.FLAG_FULLSCREEN);        // Initiate the Open GL view and        // create an instance with this activity        glSurfaceView = newGLSurfaceView(this);        // set our renderer to be the main renderer with        // the current activity context        glSurfaceView.setRenderer(newGlRenderer());        setContentView(glSurfaceView);    }    /** Remember to resume the glSurface  */    @Override    protectedvoidonResume() {        super.onResume();        glSurfaceView.onResume();    }    /** Also pause the glSurface  */    @Override    protectedvoidonPause() {        super.onPause();        glSurfaceView.onPause();    }} | 
В строке 12 мы объявляем переменную-член GLSurfaceView . Это наш вид OpenGL, предоставленный Android. Когда мы создаем его экземпляр (строка 27 ), мы должны сделать его осведомленным о контексте. То есть для представления иметь доступ к среде приложения.
Все, что нам нужно сделать, это добавить наш рендерер в это представление. Это мы делаем в строке 31 .
В строке 32 указывается действие для использования нашего представления OpenGL.
Методы onResume () и onPause () переопределяются и запускают соответствующие методы в нашем представлении.
Вы можете запустить приложение как приложение для Android, и вы должны увидеть пустой черный экран.
Вот и все. Мы перешли с холста на рендерер OpenGL.
Загрузите исходный код и проект затмения здесь (obviam.opengl.p01.tgz)
Справка: OpenGL ES с учебником по Android — переход с Canvas на OpenGL от нашего партнера по JCG Тамаса Яно из блога « Против зерна ».
- Введение в разработку игр для Android Введение
- Разработка игр для Android — Идея игры
- Разработка игр для Android — Создать проект
- Разработка игр для Android — базовая игровая архитектура
- Разработка игр для Android — основной игровой цикл
- Разработка игр для Android — Отображение изображений с Android
- Разработка игр для Android — перемещение изображений на экране
- Разработка игр для Android — The Game Loop
- Разработка игр для Android — Измерение FPS
- Разработка игр для Android — Sprite Animation
- Разработка игр для Android — Particle Explosion
- Разработка игр для Android — Дизайн игровых объектов — Стратегия
- Разработка игр для Android — Использование растровых шрифтов
- Разработка игр для Android — отображение графических элементов (примитивов) с помощью OpenGL ES
- Разработка игр для Android — OpenGL Texture Mapping
- Разработка игр для Android — Дизайн игровых сущностей — Государственный паттерн
- Серия игр для Android



