我現在有一個針對AR的標記檢測系統,它檢測場景中的標記併爲場景中的每個標記提供相機的變換矩陣。獲取兩個變換矩陣之間的旋轉矩陣(XNA)
比方說,我找到了2個標記。我試圖找到旋轉矩陣,我將必須將其應用於其中一個標記以使其與另一個標記的方向相匹配。
我認爲它應該與計算一個標記到另一個標記的變換矩陣和分解變換以獲得x,y,zuler旋轉矩陣相同,但我似乎無法得到它的工作。我正在使用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
我也注意到,日根據我如何定位相機,e和z變化很大。
兩個變換矩陣我從標記檢測獲得含有相對於相機的方向和翻譯的標誌之一,因爲這裏解釋:http://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm 我讓他們轉換成XNA格式的,我知道他們爲我正常工作可以將角落畫到屏幕上,並與相機所看到的相匹配。
我幾乎可以肯定,歐拉角的計算是正確的,但它們是在與相機相關的座標系中給出的。但是你想要相對於水平面獲得歐拉角度,不是嗎? – user502144