Как извлечь позиции Vector3 только из мировой матрицы в массиве позиций (из Kinect) - PullRequest
0 голосов
/ 02 февраля 2012

Я только начал создавать класс физических камер для данных о глубине, которые вы получаете от Kinect. У меня есть массив Vector3 [imageWidth, imageHeight], описывающий ЛОКАЛЬНЫЕ позиции, которые я получаю от kinect (как только я проецирую их обратно в поле зрения объектива камеры и т. Д.). Затем я перевожу, масштабирую и поворачиваю всю виртуальную камеру Kinect в космосе.

То, что я хочу сделать, - это снова извлечь положения входа камеры kinect, но в МИРОВОМ пространстве, а не в МЕСТНОМ пространстве (т. Е. Он прошел через перемещение, масштабирование и вращение и дает мне Vector3 для каждого значения Кинект в МИРЕ)

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2012
Vector3 pos = Vector3.Transform(Vector3.Zero, worldMatrix);
0 голосов
/ 03 февраля 2012

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

Для этого вам нужно умножить эти координаты на матрицу преобразования камеры.Эта матрица состоит из отдельных преобразований (перемещение, вращение и масштаб).

Будьте внимательны в том порядке, в котором вы применяете преобразования: перевод * масштаб! = Масштаб * перевод.

ВозможноВы можете настроить свою матрицу так:


Matrix cameraMatrix = Matrix.CreateScale(cam_sx, cam_sy, cam_sz);
cameraMatrix *= Matrix.CreateRotationX(MathHelper.ToRadians(cam_rx));
cameraMatrix *= Matrix.CreateRotationY(MathHelper.ToRadians(cam_ry));
cameraMatrix *= Matrix.CreateRotationZ(MathHelper.ToRadians(cam_rz));
cameraMatrix *= Matrix.CreateTranslation(cam_x, cam_y, cam_z);

// Now we create a point in the camera local space
Vector3 localPoint = new Vector3(0, 0, 0);
Vector3 worldPoint = Vector3.Transform(localPoint , cameraMatrix);

// Now world contains the coordinates in the world space
// For example, if your camera is located at position (5,5,5) 
// and localPoint=(0,0,0) then worldPoint=(5,5,5) which seems correct.
...