opengl 教程 7 旋轉變化

2021-09-30 10:55:24 字數 1490 閱讀 8503

本章我們來學習一下,物體的旋轉。所謂旋轉,就是乙個點,繞某個固定的軸轉動一定的角度。在笛卡爾座標系中,我們繞某個主軸轉動時候,會保持該軸決定的分量不變,比如繞z軸旋轉,z座標分量不變,x,y分量變化,所以又稱繞xy平面旋轉,當然,我們也可以繞任意向量進行旋轉操作。

我們通過下面的圖來了解一下旋轉矩陣是如何產生的?

沿著圓把頂點從位置(x1,y1)移動到(x2,y2),由圖可知,旋轉的角度是 a2 ,假定圓是以弧度為單位,則有下面的式子:

x1=cos(a1)

y1=sin(a1) 

x2=cos(a1+a2) 

y2=sin(a1+a2)

用正弦和余弦公式展開,則有:

cos(a+b) = cosacosb - sinasinb 

sin(a+b) = sinacosb+cosasinb

x2=cos(a1+a2) = cosa1cosa2 - sina1sina2 = x1cosa2 - y1sina2

y2=sin(a1+a2) = sina1cosa2 + cosa1sina2 = y1cosa2 + x1sina2

上面的式子是繞xy平面的旋轉變化,轉化到齊次座標,則有下面的公式:

同理,繞y軸的旋轉矩陣如下:

繞x軸旋轉矩陣如下:

主要變化**:

程式**做很小的變動,就是改變世界矩陣的值,改用繞z軸渲染的矩陣。

world.m[0][0]=cosf(scale); world.m[0][1]=-sinf(scale); world.m[0][2]=0.0f; world.m[0][3]=0.0f;

world.m[1][0]=sinf(scale); world.m[1][1]=cosf(scale);  world.m[1][2]=0.0f; world.m[1][3]=0.0f; 

world.m[2][0]=0.0f;        world.m[2][1]=0.0f;         world.m[2][2]=1.0f; world.m[2][3]=0.0f; 

world.m[3][0]=0.0f;        world.m[3][1]=0.0f;         world.m[3][2]=0.0f; world.m[3][3]=1.0f;

程式執行後介面如下:

RotateAnimation類 旋轉變化動畫類

rotateanimation類 旋轉變化動畫類 rotateanimation類是android系統中的旋轉變化動畫類,用於控制view物件的旋轉動作,該類繼承於animation類。rotateanimation類中的很多方法都與animation類一致,該類中最常用的方法便是rotateani...

OpenGL教程翻譯 第七課 旋轉變換

接下來的變換是旋轉,就是說給定乙個角度和點,我們將點繞著乙個座標軸旋轉。我們總是變化 三個裡面的兩個,而不讓第三部分變化。這意味著,旋轉路徑總在三個座標軸平面中的乙個之中 繞z軸的是xy面 繞x軸的是yz面 繞y軸的是xy面。還有許多複雜的旋轉轉變可以讓你繞任意乙個向量旋轉,但是眼下我們並不需要這些...

Python之OpenGL筆記 9 旋轉變換

1 使用glsl實現圖形的旋轉。旋轉變換,就是說給定乙個角度和點,我們將點繞著乙個座標軸旋轉。在旋轉過程中發生變化的總是 三個座標裡面的其中兩個,而不讓第三個座標值變化。這意味著,旋轉路徑總在三個座標軸平面中的乙個之中 繞 z 軸的是 xy 面 繞 x 軸的是 yz 面 繞 y 軸的是 xy 面。當...