osg中需要對節點進行旋轉,是通過matrixtransform節點來進行。
osg在描述旋轉時候一般通過osg::matrix來描述。
比如:osg::vec3d pt(10, 0, 0);
通過乘法可以進行對點的旋轉。
pt = pt * matrix;
matrix 裡面除了含有旋轉,還包含了縮放,平移
它的含義如下:
1 0 0 0
0 1 0 0
0 0 1 0
10 10 10 0.5
裡面的 1 0 0 表示旋轉矩陣
0 1 0
0 0 1
10 10 10 表示位移
0.5 表示縮放
四元素osg中提供介面可以直接把矩陣轉換成四元素
對於沒有縮放的矩陣,可以直接通過獲得四元素
osg::quat so = matrix.getrotate();
但是對於有縮放和位移的矩陣,不能直接使用上述方法, osg中提供了分解的方法
osg::quat quat;
osg::quat so;
matrix.decompose(tr, quat, scale, so);
尤拉角osg中並沒有提供轉換成尤拉角的介面,但是可以通過下面的函式來進行轉換
void quattohpr(osg::quat q, double& heading, double& pitch, double& roll)
if (test < -0.4999)
double sqx = q.x() * q.x();
double sqy = q.y() * q.y();
double sqz = q.z() * q.z();
heading = atan2(2.0 * q.z() * q.w() - 2.0 * q.y() * q.x(), 1.0 - 2.0 * sqz - 2.0 * sqx);
pitch = asin(2.0 * test);
roll = atan2(2.0 * q.y() * q.w() - 2.0 * q.z() * q.x(), 1.0 - 2.0 * sqy - 2.0 * sqx);
}尤拉角轉四元素 只需要清楚知道旋轉的順序,和旋轉軸即可,一般是通過下面這種方式來旋轉,即先y軸,再x軸,再z軸
osg::quat ccompresstexturedlg::hprtoquat(double heading, double pitch, double roll)
旋轉矩陣,四元素,尤拉角
旋轉變換 旋轉變換最為直觀的表示方法是 軸 角 繞著某乙個過原點軸,旋轉某一角度。軸可以用乙個單位長度的點 w1,w2,w3 w1,w2,w3 表示 原點到該點的射線即為此軸。使用右手座標系,拇指指向軸方向,四指方向即為旋轉的方向。乙個旋轉變換可以用用尤拉角 四元數或者旋轉矩陣表示。以下討論不同表示...
四元素與旋轉矩陣
如何描述三維空間中剛體的旋轉,是個有趣的問題。具體地說,就是剛體上的任意乙個點p x,y,z 圍繞過原點的軸 i,j,k 旋轉 求旋轉後的點p x y z 旋轉矩陣乘以點p的齊次座標,得到旋轉後的點p 因此旋轉矩陣可以描述旋轉,x y z 1 r xy z1 繞x,y,或z軸旋轉 的矩陣為 r x ...
旋轉矩陣 尤拉角 四元數比較
旋轉矩陣 尤拉角 四元數主要用於 向量的旋轉 座標系之間的轉換 角位移計算 方位的平滑插值計算。旋轉矩陣 尤拉角 四元數比較 不同的方位表示方法適用於不同的情況。下面是我們對合理選擇格式的一些建議 1.尤拉角最容易使用。當需要為世界中的物體指定方位時,尤拉角能大大的簡化人機互動,包括直接的鍵盤輸入方...