Попробовал следующее
Код: Выделить всё
float3 middle = //calculated the center of the cuboit
mymesh.setTransform(mymesh.getTransform()
* Matrix::createTranslation(middle)
* Matrix::createRotationY(-time * speed)
* Matrix::createTranslation(middle).invert());
Если я вращаю его вокруг оси Y, все в порядке. Если я поверну его вокруг оси X, то вращение вокруг оси Y будет локальным и больше не будет вращать Объект глобально.
Я читал, что это имеет значение с какой стороны моей матрицы вращения я умножаю свою матрицу, представляющую трехмерный объект.
Если я хочу, чтобы она вращалась вокруг локальной оси, я умножаю ее на левую сторону.
Код: Выделить всё
Result = M * rotation
Если я хочу, чтобы она вращалась вокруг глобальной оси, я умножаю ее с правой стороны:
Код: Выделить всё
Result = rotation * M
Я делаю следующие вычисления:
Код: Выделить всё
Matrix m = Matrix::createTranslation(middle)
* Matrix::createRotationY(-time * speed)
* Matrix::createTranslation((-1.0)* middle);
mymesh.setTransform(m * mymesh.getTransform());
Переменная middle рассчитывается в зависимости от размера кубиота и представляет его центр.
скажем так будет p1(1,1,1)
Если я переместим свой объект в 3D, например, на 10 по оси z, то мой объект окажется где-то в p2(0,0,10) . Но если я передвину Объект около -p1 назад, поверну его и перемещу назад, то мой Объект все равно не окажется в начале координат, но будет вращаться так же, как в начале координат.
Кажется, я не понимаю чего-то важного. Как мне повернуть вокруг глобальной оси и повернуть ее так, как будто она находится в начале координат? Почему первая реализация работает?
РЕДАКТИРОВАТЬ:
Матрица — это матрица 4x4 для представления сетки, а float3 — это точка для системы координат x,y,z
EDIT2:
ОК, решение проблемы, похоже, состоит в том, чтобы вычислить сделанный перевод. если я знаю вектор для перевода, то я могу переместить объект обратно в начало координат, повернуть его и вернуть туда, где он был.
Я пытался отслеживать центр объекта, добавляя к векторизирую каждое движение, которое я делаю, но когда я меняю форму объекта, центр оказывается неправильным.
Есть ли способ вычислить перевод, сделанный из объекта?
Например, если я передвигаю его дальше ось X на 10 вправо, а затем поверните ее. центр не изменит положение, но просто перевод матрицы вернет неправильное значение.
Подробнее здесь: https://stackoverflow.com/questions/427 ... obalm-axis
Мобильная версия