Вращение с помощью кватернионов JOGL

302
08 октября 2017, 22:30

Здравствуйте! Рисую 3D-объект с помощью OpenGl на java. Возникла необходимость перемещать и вращать этот объект вокруг своих осей. Пользовался стандартным вариантом для вращения:

gl.glRotatef(angleRotateX, 1f, 0f, 0f);
gl.glRotatef(angleRotateY, 0f, 1f, 0f);
gl.glRotatef(angleRotateZ, 0f, 0f, 1f);

Но, на большое удивление, ожидаемо работает только вращение вокруг Z. Вращение вокруг остальных осей происходит вокруг глобальной системы координат.

Попытался использовать кватернионы:

Quaternion xQ = new Quaternion((float) Math.sin(Math.toRadians(angleRotateX) / 2f), 0f, 0f, (float) Math.cos(Math.toRadians(angleRotateX) / 2f));
Quaternion yQ = new Quaternion(0f, (float) Math.sin(Math.toRadians(angleRotateY) / 2f), 0f, (float) Math.cos(Math.toRadians(angleRotateY) / 2f));
Quaternion zQ = new Quaternion(0f, 0f, (float) Math.sin(Math.toRadians(angleRotateZ) / 2f), (float) Math.cos(Math.toRadians(angleRotateZ) / 2f));
xQ.normalize();
yQ.normalize();
zQ.normalize();
float[] xM = new  float[3];
float[] yM = new  float[3];
float[] zM = new  float[3];
Quaternion rQ = xQ.mult(yQ).mult(zQ);
rQ.toAxes(xM, yM, zM, new float[16]);
gl.glRotatef(angleRotateX, xM[0], xM[1], xM[2]);
gl.glRotatef(angleRotateY, yM[0], yM[1], yM[2]);
gl.glRotatef(angleRotateZ, zM[0], zM[1], zM[2]);

Результат, к сожалению, остался точно таким же. Подскажите, пожалуйста, что я делаю не так?

READ ALSO
Как получить все элементы Grid view

Как получить все элементы Grid view

Здравствуйте, подскажите, пожалуйста, как получить все элементы gridviewУ меня в gridview находится матрица editText, записывалось через собственный...

225
Какая разница между сервлетом и веб сервисом?

Какая разница между сервлетом и веб сервисом?

Начинаю знакомиться с вебРассматриваю примеры HelloWorld'ов, где в некоторых приводится реализация с использованием сервлетов, и при открытии...

180
Вырезка картинки

Вырезка картинки

Допустим у меня есть некий имейдж с размерами 200, 50:

169
Как сохранять связанные классы в Realm?

Как сохранять связанные классы в Realm?

Я только начал использовать RealmСначала понятно, если хранить один класс, то есть один объект

150