osg座標經過矩陣縮放後的影響

今天碰到一個很鬼畜的問題:
在osgEarth上通過經緯度選取兩個點,轉爲世界座標後求差得到出發點指向目的點的相對位置向量,將該位置向量作爲出發點子節點的translate參數進行一個簡單的回調動畫,得到的結果與預期大相徑庭。
如下圖:
在這裏插入圖片描述
得到的結果是模型飛到天邊去了,位置相差巨大。經檢查座標轉換函數沒有問題,最後發現是矩陣縮放的
osg::Matrix::scale方法惹的禍,因爲模型不符合預期大小,於是雙雙進行了放大100倍的操作,然後模型本身的座標系尺度也被相應放大了,如下圖:
在這裏插入圖片描述
進行了縮放操作以後,模型的座標軸尺度也被同比放大了,假設原來出發點是(10,0,0),目標點是(40,0,0),本來得到的有向向量是(30,0,0),就是沿着x軸正方向,從出發點指向目的點的向量,結果縮放後變成了(1000,0,0)和(4000,0,0),這樣看起來兩個模型的相對位置是沒有區別的,都是在同尺度的1和4的位置,但是在世界座標下他們之間的向量是(3000,0,0),這時候再用目標點向量減去出發點向量就會得到一個遠超預期的向量。

解決方法:
1.得到作差的結果後手動恢復縮放比例,模型放大了100倍,得到的結果就/100;模型縮小了200倍,得到的模型就*200(兩個模型縮放比例相同的情況下
2.兩個模型比例不同的情況下,可以設置參考幀setReferenceFrame,強制他們使用世界座標。

感謝觀看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章