Запрещенные вещи и приемы программирования OpenGL ES 1.x (Android) - PullRequest
1 голос
/ 06 ноября 2011

Этот вопрос касается программирования 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 Ответ

0 голосов
/ 28 февраля 2012

Определить лаг? Может быть полезно взглянуть на частоту кадров, чтобы получить лучшее представление о производительности.

Но TBH, пока square.draw(gl) делает то, что подразумевает, тогда это очень простая программа. В этом коде нет ничего тяжелого в производительности.

Мне кажется, что это скорее умозрительный вопрос для более крупного проекта. Некоторые вещи, которые следует учитывать, это то, какого рода графических эффектов вы будете пытаться достичь. Будет ли OpenGL ES 1.x достаточно мощным для вас? Если вам нужно написать собственный код шейдера, вы должны использовать ES 2.0. Помните, однако, что 2.0 требует, чтобы вы писали все как шейдер. Он вырывает многие из функций 1.0 и предоставляет разработчикам эти функции для реализации и настройки. Поэтому разработка будет более сложной и займет больше времени.

В качестве предупреждения, не погружайтесь прямо в NDK в качестве отправной точки. Все эти вызовы OpenGL уже являются родными. Писать Android-приложение на Java Land будет намного (намного) намного проще, чем на C / C ++ с использованием JNI.

Как последнее слово, ранняя оптимизация - корень всего зла. После того, как вы выбрали свои технологии, внедрили решение и измерили его производительность, вы можете беспокоиться об оптимизации кода!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...