如何仅从位置数组中的世界矩阵中提取Vector3位置(来自Kinect)

时间:2012-02-02 11:17:38

标签: vector 3d matrix xna kinect

我刚开始为您从Kinect获取的深度数据构建物理相机类。我有一个{3}的Vector3数组,描述了我从kinect进入的LOCAL位置(一旦我将它们投射到相机镜头的FOV上等)。然后我在空间中翻译,缩放和旋转整个虚拟kinect相机。

我想要做的是再次提取kinect相机输入的位置,但是在WORLD空间,而不是LOCAL空间(即它经历了平移,缩放和旋转,并为每个值提供了一个Vector3世界空间中的kinect。)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要在相机空间中将3D点坐标转换为世界空间。

为此,您需要将这些坐标与相机变换矩阵相乘。该矩阵由单个变换(平移,旋转和缩放)组成。

请注意应用转换的顺序:translate * scale!= scale * translate。

您可以像这样设置矩阵:


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.

答案 1 :(得分:0)

Vector3 pos = Vector3.Transform(Vector3.Zero, worldMatrix);