簡體   English   中英

俯仰偏航角,角度獨立

[英]pitch yaw roll, angle independency

我正在努力弄清楚如何使它們之間的偏航和側傾獨立。 一旦我在z軸(螺距)上旋轉某些東西,第二旋轉(y軸偏航)就取決於第一和第三旋轉的結果(x軸,橫搖)取決於其他兩個。 因此,我沒有將它們三個單獨地混合在一起,而是丑陋了。

我希望可以將對象角度存儲在數組[pitch,yaw,roll]中,然后在轉換過程中對這些角度進行解碼,以使偏航將對象放置在給定位置,然后采用與角度相對應的角度,但是兩者都不是...

我已經看到了對“任意軸旋轉矩陣”的引用。 獲得期望的結果會有用嗎??? 1)應用偏航(gl.glRotatef(beta,0.0f,1.0f,0.0f);)2)獲取手動旋轉矢量的結果軸(1.0f,0.0f,0.0f)圍繞beta 3)使用軸進入2 {並且用於滾動...如果1,2,3是正確的} 4)旋轉進入2的軸繞其x進行滾動5)使用進入4的軸進行滾動

能行嗎? 有更好的解決方案嗎? 我想將對象的局部方向保持為[pitch,yaw,roll]格式。

我已經為此苦苦掙扎了好幾天,如果可能的話,我想避免使用四元數。 3D對象相對於0,0,0進行存儲並沿{1,0,0}進行查看,並轉換為它們的目的地和每一幀的角度,因此應該很容易避免萬向架鎖定問題。

換句話說,我的相機工作正常,可以正確制作世界坐標,但是我不知道應該如何或在何處基於偏航,縱搖,橫搖應用對象局部變換。

結果應從數組[y,p,r]中讀取,並且它們的組合不應重疊

實際上,我的轉換是:

gl.glLoadIdentity(); 
float[] scalation = transform.getScalation();
gl.glScalef(scalation[0], scalation[1], scalation[2]); 
float[] translation = transform.getTranslation();
gl.glTranslatef(translation[0], translation[1], translation[2]);
float[] rotation = transform.getRotation();
gl.glRotatef(rotation[0], 1.0f, 0.0f, 0.0f);
gl.glRotatef(rotation[1], 0.0f, 1.0f, 0.0f);
gl.glRotatef(rotation[2], 0.0f, 0.0f, 1.0f);

方向始終取決於角度順序。 你不能讓他們獨立。 旋轉將向量乘以矩陣,矩陣乘法是不可交換的。 您可以選擇一個訂單並與之保持一致。 對於這些問題,通常的選擇是ZYX定向方法(先滾動,然后俯仰,最后偏航)。 我在處理角度時的個人參考是此文檔 ,對我有很大幫助。

如果您使用偏航/俯仰/滾動,則最終方向將始終取決於應用它們的數量和順序。 如果您希望可讀性或簡單性,則可以選擇其他方案。 我喜歡選擇前向矢量(F),然后根據規范的“世界向上”矢量計算右向上矢量,然后僅填充矩陣列。 如果願意,可以添加一個額外的“軸旋轉”角度項。 它有點像四元數,但是更易於理解。 我使用此表示來控制基本的WASD風格的相機。

累積旋轉(偏航,俯仰,橫滾)需要保持一個變換矩陣,該矩陣是各個變換按其發生的順序生成的。 生成的矩陣是圍繞某個軸和某個角度的旋轉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM