Есть ли более чистый способ сбросить начальную точку рисования в OpenGL - для Android - PullRequest
0 голосов
/ 20 февраля 2012

поэтому я рисую кучу квадратных равнин в моем GLView и задаюсь вопросом, есть ли более чистый способ сброса glTransatef между каждым квадратом ... мой первый квадрат, скажем, на -5 от оси z, а затем следующий квадрат я хочу нарисовать в +5 на оси.

     gl.glTranslatef(0.0f, 0.0f, -5.0f);     // move 5 units INTO the screen
     square.draw(gl);

     gl.glTranslatef(0.0f, 0.0f, 10.0f);     // move 10 units to compensate for last point
     square2.draw(gl);

еще один вопрос, который у меня есть, в настоящее время мои два квадратных класса имеют различный matirx, так что они видны с противоположной стороны, как и другие. Есть ли способ просто иметь один квадратный класс и изменить способ его отображения, когда я рисую его, вместо того, чтобы иметь совершенно другой класс?

1 Ответ

4 голосов
/ 20 февраля 2012

glPushMatrix glPopMatrix

 glPushMatrix();
 gl.glTranslatef(0.0f, 0.0f, -5.0f);     // move 5 units INTO the screen
 square.draw(gl);
 glPopMatrix();

 glPushMatrix();
 gl.glTranslatef(0.0f, 0.0f, +5.0f);     // move 10 units to compensate for last point
 square2.draw(gl);
 glPopMatrix();

EDIT

glPushMatrix создает копию текущей активной матрицы (в текущем режиме матрицы и стеке) и помещает ее на вершину стека матрицы. Все матричные операции происходят в верхней части стека матрицы. glPopMatrix удаляет матрицу в верхней части стека, так что все дальнейшие операции над матрицами (в текущем режиме матрицы и в стеке) работают с матрицей, которая была сохранена с помощью соответствующей кнопки.

Обратите внимание, что в OpenGL-ES 2 и OpenGL 3 и более поздних версиях больше нет функций манипулирования матрицей, поэтому в наши дни это немного устарело.

Обновление для второго подвопроса

еще один вопрос, который у меня есть, в настоящее время мои два квадратных класса имеют различный matirx, так что они видны с противоположной стороны, как и другие. Есть ли способ просто иметь один квадратный класс и изменить способ его отображения, когда я рисую его, вместо того, чтобы иметь совершенно другой класс?

Просто сделайте эту 2-ю матрицу членом класса и установите ее в соответствии с конструктором класса. На самом деле, я не очень понимаю вашу проблему. Пример кода поможет.

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