OpenGL ES / Android - есть ли встроенная функция для сброса масштаба, перемещения, поворота объекта? - PullRequest
1 голос
/ 30 апреля 2011

Моя программа рисует объект, затем переводит, вращает и масштабирует его, затем перерисовывает и т. Д. Чтобы установить перевод, я бы сделал:

gl.glTranslatef(2,4,666);

затем очистить его gl.glTranslatef(-2,-4,-666);

Мне интересно, есть ли встроенная функция для этого?

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

glPushMatrix () и glPopMatrix () являются обычными способами сделать это. Нажмите перед применением glTranslate, нажмите, когда закончите, и он вернет стек. Вы должны помнить, что OpenGL - это система, основанная на состоянии, которая использует стек. Когда вы применяете glTranslatef, вы добавляете функцию перевода в стек, поэтому все, что нарисовано после размещения в стеке, будет выполнять этот перевод. Вызов

gl.glTranslatef(2,4,666); 

, а затем

gl.glTranslatef(-2,-4,-666);

если я правильно понимаю, сцена сначала переместит ваш объект в (-2, -4, -666), а затем назад (2,4666). Поскольку это стек, последнее примененное преобразование применяется первым, а первое - последним. Это помогает запомнить этот маленький факт, пока вы настраиваете свою сцену. Просто вставьте толчок перед gl.glTranslatef (2,4666); и поп после, и все будет хорошо.

glPushMatrix();
gl.glTranslatef(2,4,666);
//draw code here
glPopMatrix();

Просто запомните весь стек, и вы сможете продумать любые проблемные области.

5 голосов
/ 30 апреля 2011

Просто сбросьте матрицу, используя glLoadIdentity().

Другая альтернатива (если у вас много объектов, которым требуется собственная матрица) - это сделать рисунки вашего объекта на матричной копии.Для этого вам нужно использовать glPushMatrix() и glPopMatrix().

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