Я очень смущен тем, что моя проблема здесь.Я установил матрицу, которая преобразует глобальные / мировые координаты в локальное координатное пространство объекта.Эта матрица преобразования построена с использованием информации об объектах из четырех векторов (вперед, вверх, сторона и положение).Эта матрица локализации затем передается в glMultMatrixf()
во время рисования для каждого объекта, чтобы я мог нарисовать простые оси вокруг каждого объекта для визуализации локальной системы координат.Это работает совершенно нормально, как и ожидалось, и когда объекты движутся и вращаются в мире, так же поступают их локальные оси координат.
Проблема в том, что когда я беру эту же матрицу и умножаю ее на вектор столбца (преобразовать глобальную позицию одного объекта в локальную систему координат другого объекта) результат совсем не такой, как я ожидал.Например:
Моя матрица локализации выглядит следующим образом:
0.84155 0.138 0.5788 0
0.3020 0.8428 -0.5381 8.5335
0.4949 -0.5381 -0.6830 -11.6022
0.0 0.0 0.0 1.0
Я ввожу вектор столбца положения:
-30.0
-30.0
-30.0
1.0
И получаю вывод:
-99.2362
-1.0199
4.8909
1.0000
Поскольку положение моего объекта в данный момент времени (-50.8, 8.533, -11.602, 1), я знаю, что выход для координаты x не может быть таким же большим, как -99.2362.Кроме того, когда я нахожу расстояние между двумя глобальными точками и расстояние между локализованной точкой и началом координат, они различаются.
Я проверил это в Matlab, и кажется, что мое умножение матриц правильное (Примечание: в Matlab вы должны сначала транспонировать матрицу локализации).Поэтому мне остается думать, что моя матрица локализации строится неправильно, но затем OpenGL успешно использует эту матрицу для рисования локальных координатных осей!
Я пытался не включать ненужные детали в этот вопросно если вы чувствуете, что вам нужно больше, пожалуйста, не стесняйтесь спрашивать!:)
Большое спасибо.