OpenGL(四) 左右手座標系及基本座標變換

2021-07-24 11:13:38 字數 1800 閱讀 1601

左手座標系:伸開左手,大拇指指向x軸正方向,食指指向y軸正方向,其他三個手指指向z軸正方向。

右手座標系:伸開右手,大拇指指向x軸正方向,食指指向y軸正方向,其他三個手指指向z軸正方向。

左右手座標系的示意圖如下:

左手和右手座標註系的區別在於兩者z軸的方向是相反的。

在高等數學中使用的三維空間是笛卡爾座標系,如下:

笛卡爾座標系其實就是右手座標系,opengl中使用右手座標註系,direct3d使用的是左手座標系。

左右手旋轉規則用於判斷當前座標系中物體旋轉時正方向的判定。在右手座標系中,確定旋轉軸後,右手握成拳頭,拇指指向旋轉軸的正方向,其餘手指的彎曲方向即為旋轉的正方向,跟手指彎曲方向一致的旋轉記為正向,相反則為負向。左手座標註系中判斷旋轉方向的正負使用左手,其他規則一樣。兩者的示意圖:

在opengl中,對物體的移動、縮放、旋轉操作要使用模型變換,有三個模型變換函式:

平移:

gltranslatef (glfloat x, glfloat y, glfloat z);

x,y,z分別表示物體在xyz方向上的平移,舉例來說,gltranslatef(-5.0f,4.0f,-3.0f)表示物體沿x軸負方向移                 動5,y正方向移動4,z負方向移動3。

旋**glrotatef (glfloat angle, glfloat x, glfloat y, glfloat z);

第乙個引數是旋轉角度,後三個引數定義了旋轉軸,這個旋轉軸是由地當前座標系的原點和點(x,y,z)的直               線。正方向是原點指向點(xyz)。如果要定義不經過原點的旋轉軸,則需要先把物體的旋轉軸平移到過原                 點,旋轉之後,再經過平移的逆變換平移回去。

縮放:glscalef (glfloat x, glfloat y, glfloat z);

三個引數分別是物體在xyz三個方向上的縮放比例。

舉例如下,原始影象:

平移:

旋**

縮放:

座標變換完整**:

#include #include using namespace std;

void mydisplay(void)

glend();

glflush();

} int main(int argc, char *argv)

左右手座標系

眾所周知,opengl使用的是右手座標系,而direct3d使用的是左手座標系。除了上面z軸的方向不一樣外,左右手座標系的還有其他區別 正向旋轉方向 在左手系中用left hand rule判別,正方向是順時針方向。在右手系中,用right hand rule判別,是逆時針方向。叉積的方向 在右手座...

左右手座標系轉換

假定sz是乙個縮放矩陣,能把z取反,也就是 sz 1 0 0 0 1 0 0 0 1 p x,y,z p x,y,z 也就是p 和 p 在不同手性下表示相同位置的乙個點 那麼 p sz p 反之也成立,也就是 p sz p 平移變換的變換同上 現在考慮y軸的旋轉,也就是yaw 假定在左手系下,p1 ...

OpenGL 你不知道的左右手座標系

眾所周知,opengl使用的是右手座標系,而direct3d使用的是左手座標系。除了上面z軸的方向不一樣外,左右手座標系的還有其他區別 正向旋轉方向 在左手系中用left hand rule判別,正方向是順時針方向。在右手系中,用right hand rule判別,是逆時針方向。叉積的方向 在右手座...