Android OpenGL: как вращаться вокруг мировых осей? - PullRequest
2 голосов
/ 24 апреля 2020

У меня есть touchRotationMatrix, который я делаю следующим образом:

Matrix.setIdentityM(identity, 0);
Matrix.rotateM(identity, 0, x, 0,1,0);
Matrix.multiplyMV(v, 0, identity, 0, v, 0)
Matrix.rotateM(identity, 0, y, 1,0,0);
Matrix.rotateM(identity, 0, y, v[0],v[1],v[2]);     
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);

X и Y - нормализованные дельты вращения.

Это применяется к моей матрице модели следующим образом:

Matrix.multiplyMM(mModelMatrix, 0, mModelMatrix, 0,touchRotationMatrix,0);

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

Позвольте мне проиллюстрировать, почему я не хочу этого:

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

Мой вопрос: как мне сделать так, чтобы вращение х не происходило по своим осям?

Надеюсь, я ясен, любое руководство или помощь будут очень благодарны! Спасибо!

PS Я не эксперт ни по OpenGL, ни по LinearAlgebra.

1 Ответ

3 голосов
/ 24 апреля 2020

Не очень понятно, но

Matrix.setRotateM(identity, 0, y, 1,0,0);
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);
Matrix.rotateM(touchRotationMatrix, 0, x, 0,1,0);

или

Matrix.setRotateM(identity, 0, x, 0,1,0);
Matrix.multiplyMM(touchRotationMatrix, 0, identity, 0, touchRotationMatrix, 0);
Matrix.rotateM(touchRotationMatrix, 0, y, 1,0,0);

может работать как вы ожидаете.

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