OpenGL學習筆記(四)

2021-07-31 17:25:22 字數 1719 閱讀 4563

接下來我們將學習影象旋轉。影象的旋轉通過呼叫glrotatef(angle,xvector,yvector,zvector)實現。angle表示旋轉角度(注意是角度不是弧度),xvector表示沿x軸旋轉,yvector表示沿著y軸旋轉,zvector表示沿著z軸旋轉。注意旋轉角度和rgb設定不一樣,rgb的範圍是0.0f-1.0f,而角度旋轉的範圍是0.0f-360.0f(其實可以超過360.0f,不過為了避免溢位我們應該將其做乙個約束)。

影象的旋轉方向遵循右手定則,即右手握住旋轉的軸,右手大拇指朝向軸的正方向,那麼你右手其他手指所朝的方向便為正方向。

為了實現影象的旋轉,我們將嘗試呼叫乙個glrotatef方法。

首先我們還是在drawglscene方法中,通過gltranslatef確定繪點以後,我們就可以插入glrotatef(rtri, 0.0f, 0.0f, 1.0f)來繞著z軸旋轉。為此我們需要定義乙個glfloat型別的全域性變數rtri。同時在drawglscene方法結束之前我們需要不斷改變rtri的值來實現影象的旋轉工作。

最終的參考**如下(注意需要自己定義乙個全域性變數rtri)。

int drawglscene(glvoid)                                 // 從這裡開始進行所有的繪製

實現的效果如下圖所示。

上述方法實現了整個畫面繞著z軸旋轉的情況,我們接下來將實現兩個影象分別旋轉的場景。

首先我們嘗試直接在繪製矩形之前,直接開始對矩形矩形旋選,旋轉結果如下所示。

這個時候我們發現矩形的旋轉很異常,他並不是按照我們理想的情況下繞著自己的x軸旋轉。這是因為在之前的三角形旋轉過程中,實際在旋轉的是整個座標系(這樣做是很有道理裡的,它能讓我們很方便的畫出這個三角形,而不用費心計算每個點在固定參考座標系下旋轉之後新的座標位置)。

為了解決這個問題,我們在三角形旋轉完畢之後,應該重新呼叫glloadidentity進行座標初始化。然後我們重新設定繪點gltranslatef,注意這個時候繪點的引數應該為(1.5f, 0.0f, -6.0f),因為重置後繪點座標為(0.0, 0.0, 0.0),我們應該將矩形的繪點設定到和三角形相同的位置上。

最終的兩個圖形的旋轉的參考**如下。

int drawglscene(glvoid)                                 // 從這裡開始進行所有的繪製

我們已經實現了對2d影象的構建著色以及選裝,接下來我們將實現乙個3d影象的構建以及旋轉。

我們在之前構建三角形的教程中已經知道,在glbegin和glend之間可以有很多次相同形狀的繪製,所以我們將利用這個特點在實驗中利用4個三角形繪製乙個金字塔,用6個矩形繪製乙個立方體。

繪製過程我們就不再贅述了,旋轉方式我們在上一次實驗中也已經了解了,所以我們直接上**和結果圖。

int drawglscene(glvoid)                                 // 從這裡開始進行所有的繪製

OpenGL入門筆記(四)

前面一直在畫二維圖形,其實三維圖形的繪製就是以其為基礎,可以說二維不過是三維的一種特例 相當與z 0 比如說要畫乙個正方體,它有上下左右前後共六個面組成,也就是要畫出六個正方形就可以了,只是要注意繪製時應該按逆時針繪製 好像是進行紋理對映時需要的。我們必須將opengl螢幕想象成一張很大的畫紙,後面...

OpenGL學習筆記四(多邊形)

在qt中的opengl模組中,使用opengl是比較簡單的,只需要在你建立的專案中新增 qopenglwidget 和qopenglfunctions就可以使用opengl基本上所有的功能。include include 在qt中使用opengl繪製點線也非常簡單。在開始繪製點線之前有幾個函式是必須...

OpenGL入門學習(四)

opengl支援兩種顏色模式 一種是rgba,一種是顏色索引模式。無論哪種顏色模式,計算機都必須為每乙個畫素儲存一些資料。不同的是,rgba模式中,資料直接就代表了顏色 而顏色索引模式中,資料代表的是乙個索引,要得到真正的顏色,還必須去查索引表。1.rgba顏色 rgba模式中,每乙個畫素會儲存以下...