Android openGL перевод и вращение объектов одновременно - PullRequest
0 голосов
/ 03 апреля 2012

Используя Android opengl, мне нужно переместить объект из точки A в точку B и одновременно повернуть его вокруг своей локальной оси Z.Последние 3 дня я читал учебные пособия, каждый из них дает вам информацию и подсказки, но никто не может объяснить это сверху вниз для начинающих.

Я знаю, как переводить объект только из точкиA в точку B. Я также знаю, как вращать объект в точке A вокруг его локальной оси (перевести его в исходное положение, повернуть его, перевести обратно). Я не знаю, как вращать и перемещать одновременно.

Я пытался перевести в начало координат, повернуть, перевести обратно, затем перевести в точку B. Это не работает, и я думаю, я знаю почему (вращение мешает оси объекта, поэтому перевод в точкуB неверен)

A(-x1, y1 , -z1)
B(-x1 + deltaX, y1 + deltaY, -z1 + deltaZ)
_gl.glTranslatef(x1, -y1 , z1);         
_gl.glRotatef(degrees, x1, -y1 , z1);                               
_gl.glTranslatef(-x1, y1 , -z1);
_gl.glTranslatef(deltaX, deltaY, deltaZ);

Мне нужно принять во внимание то, как вращение изменяет оси.Некоторые говорят, что я могу сделать это с помощью кватернинонов или матриц вращения и т. Д. Но у меня недостаточно знаний opengl, чтобы использовать apis для решения этой проблемы.

Может кто-нибудь объяснить мне это?С каким-то кодом тоже?

Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2012

Если у вас есть следующий код:

glTranslate(x, y, z);
glRotatef(angle, 0, 0, 1);
drawObject();

Объект будет сначала вращаться вокруг своей локальной оси Z, а затем переведен с помощью (x, y, z). Вызов преобразования, ближайший к вызову отрисовки, происходит первым.

Из вашего кода кажется, что вы на самом деле не хотите вращать объект вокруг его собственного источника, а в какой-то другой точке, в этом случае вы должны сделать следующее:

glTranslate(x, y, z);                         //Transform 4
glTranslate(origin.x, origin.y, origin.z);    //Transfrom 3
glRotatef(angle, 0, 0, 1);                    // Transform 2 
glTranslate(-origin.x, -origin.y, -origin.z); // Transform 1
drawObject();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...