Я написал простую AR-программу в XNA, и теперь я пытаюсь найти относительное преобразование между двумя маркерами.Попытка найти относительное преобразование между двумя позициями - XNA
Я разместил свои маркеры относительно своей камеры и извлек матрицы перевода и вращения для маркеров.
То, что я пытаюсь сделать, это выяснить относительный перевод, чтобы добраться до маркера 2 от маркера 1. Например, если маркер 1 и маркер 2 лежали на одной и той же плоскости Z, компонент сдвига Z составлял бы 0 мм.
Изображение ниже приложение работает на 2 позиции по одной и той же плоскости:
я предположил, что простое умножение матрицы 2-го маркеров обратной 1 маркеров можно получить перевод. Однако я получаю совершенно неправильные результаты.
код Я бегу следующим образом:
posit.EstimatePose (точки, из матрицы, из транс);
float yaw, pitch, roll;
matrix.ExtractYawPitchRoll(out yaw, out pitch, out roll);
Matrix rotation =
Matrix.CreateFromYawPitchRoll(-yaw, -pitch, roll);
Matrix translation =
Matrix.CreateTranslation(new Vector3(trans.X, trans.Y, -trans.Z));
Matrix complete = rotation * translation;
List<Matrix> all = new List<Matrix>();
all.Add(rotation);
all.Add(translation);
all.Add(complete);
matrixes.Add(all);
}
Matrix res = Matrix.Invert(matrixes[0][2]) * matrixes[1][2];
Vector3 scaleR;
Vector3 translationR;
Quaternion rotationR;
res.Decompose(out scaleR, out rotationR, out translationR);
Результат:
TranslationR: {X: Y -103,4285: -104,1754 Z: 104,9243}
Я накладными 3D-осей на изображение, как показано выше, с использованием XNA, так что я полагаю, поворот и трансляция относительно камеры были разработаны правильно.
Кажется, что я делаю что-то неправильно, чтобы вычислить перевод. Я бы определенно не ожидал, что Z будет равняться 104 мм. Я что-то вдоль линий ожидали:
{X: 0 Y: 150 Z: 0}