#android #graphics #opengl-es
#Android #графика #opengl-es
Вопрос:
Этот вопрос касается программирования OpenGL ES 1.x для Android.
Я следовал этим руководствам и тестировал код на Samsung Galaxy Ace, и он немного отставал. Некоторый код из этого руководства:
public void onDrawFrame(GL10 gl) {
// Clears the screen and depth buffer.
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Replace the current matrix with the identity matrix
gl.glLoadIdentity();
// Translates 10 units into the screen.
gl.glTranslatef(0, 0, -10);
// SQUARE A
// Save the current matrix.
gl.glPushMatrix();
// Rotate square A counter-clockwise.
gl.glRotatef(angle, 0, 0, 1);
// Draw square A.
square.draw(gl);
// Restore the last matrix.
gl.glPopMatrix();
// SQUARE B
// Save the current matrix
gl.glPushMatrix();
// Rotate square B before moving it, making it rotate around A.
gl.glRotatef(-angle, 0, 0, 1);
// Move square B.
gl.glTranslatef(2, 0, 0);
// Scale it to 50% of square A
gl.glScalef(.5f, .5f, .5f);
// Draw square B.
square.draw(gl);
// SQUARE C
// Save the current matrix
gl.glPushMatrix();
// Make the rotation around B
gl.glRotatef(-angle, 0, 0, 1);
gl.glTranslatef(2, 0, 0);
// Scale it to 50% of square B
gl.glScalef(.5f, .5f, .5f);
// Rotate around it's own center.
gl.glRotatef(angle*10, 0, 0, 1);
// Draw square C.
square.draw(gl);
// Restore to the matrix as it was before C.
gl.glPopMatrix();
// Restore to the matrix as it was before B.
gl.glPopMatrix();
// Increse the angle.
angle ;
}
- Какие части недели здесь?
- Что нужно сделать, чтобы оптимизировать программу OpenGL ES для Android?
- Должен ли я использовать NDK в больших графических проектах?
- Стоит ли переходить непосредственно на OpenGL ES 2.0?
Поскольку я не нашел ни одной хорошей и сложной книги по программированию OpenGL ES 1.x для Android, я обращаюсь с этим вопросом к уважаемым пользователям Stackoverflow. Был бы признателен за любую помощь.
Комментарии:
1. Обратите внимание, что OpenGL-es на Android отстает в эмуляторе и в режиме отладки намного больше, чем при обычном запуске на устройстве
Ответ №1:
Что такое задержка? Возможно, было бы полезно посмотреть на частоту кадров, чтобы получить лучшее представление о производительности.
Но TBH, пока square.draw(gl)
делает то, что подразумевается, то это очень простая программа. В этом коде нет ничего сверхпрочного.
Однако я понимаю, что это скорее умозрительный вопрос для более крупного проекта. Следует учитывать, какого рода графических эффектов вы будете пытаться достичь. Будет ли OpenGL ES 1.x достаточно мощным для вас? Если вам нужно написать пользовательский шейдерный код, вы должны использовать ES 2.0. Помните, однако, что 2.0 требует, чтобы вы писали все в виде шейдера. Он удаляет многие функции версии 1.0 и предоставляет эти функции разработчику для реализации и настройки. Таким образом, разработка будет более сложной и отнимающей больше времени.
Предупреждаю, не стоит сразу погружаться в NDK в качестве отправной точки. Все эти вызовы OpenGL уже являются собственными. Будет намного (намного намного) проще написать приложение для Android на Java, чем на C / C с использованием JNI.
В заключение скажу, что ранняя оптимизация — это корень всего зла. После того, как вы выбрали свои технологии, внедрили решение и измерили его производительность, вы можете беспокоиться об оптимизации кода!