我目前有一个用于 AR 的标记检测系统,它检测场景中的标记并为场景中的每个标记提供相机的变换矩阵。
假设我找到了 2 个标记。我正在尝试找到必须应用于其中一个标记的旋转矩阵,以使其与另一个标记的方向匹配。
我认为它应该与计算一个标记到另一个标记的变换矩阵并分解变换以获得 x,y,z 欧拉旋转矩阵相同,但我似乎无法让它工作。我将 C# 与 XNA 一起使用。
在代码中:
Matrix marker1 = markerTransforms[0];
Matrix marker2 = markerTransforms[1];
Matrix relativeTransform = Matrix.Invert(marker1) * marker2;
Quaternion rotation;
Vector3 scale;
Vector3 translation;
relativeTransform.Decompose(out scale, out rotation, out translation);
Matrix rotationMatrix = Matrix.CreateFromQuaternion(rotation);
上面的这个似乎不起作用。
另一个问题是如何从旋转矩阵中提取 x,y,z 欧拉旋转?
编辑:
我在这里找到了一个按照 x,y,z 顺序将四元数转换为欧拉的函数:http ://forums.create.msdn.com/forums/p/4574/23763.aspx
将此应用于我的代码,我得到以下结果:
实际旋转应该是:x:0 y:0 z:-0.52
我还注意到 y 和 z 变化很大,这取决于我如何放置相机。
我从标记检测器获得的两个变换矩阵包含相机相对于其中一个标记的方向和平移,如下所述:http: //www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm 我已经转换将它们转换为 XNA 格式,我知道它们可以正常工作,因为我可以将角绘制到屏幕上,并且它与相机所看到的相匹配。