1. 程式人生 > 實用技巧 >Qt OpenGL 你的第一個多邊形

Qt OpenGL 你的第一個多邊形

這次教程中,我們將新增一個三角形和一個四邊形。或許你認為這很簡單,但要知道任何複雜的繪圖都是從簡單開始的,或者說任何複雜的模型都是可以分解成簡單的圖形的。所以,我們還是從簡單的圖形開始吧。

讀完這一次教程,你還會學到如何在空間放置模型以及瞭解OpenGL中座標變化。

程式執行時效果如下:

下面進入教程:

我們將使用GL_TRIANGLES來建立一個三角形,GL_QUADS來建立一個四邊形。在第01課程式碼的基礎上,我們只需在paintGL()函式中增加程式碼。

下面我將重寫整個paintGL()函式,具體程式碼如下:

 1 void MyGLWidget::paintGL()                              //
從這裡開始進行所以的繪製 2 { 3 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除螢幕和深度快取 4 glLoadIdentity(); //重置當前的模型觀察矩陣 5 6 glTranslatef(-1.5f, 0.0f, -6.0f); //左移1.5單位,並移入螢幕6.0單位 7 glBegin(GL_TRIANGLES); //開始繪製三角形
8 glVertex3f(0.0f, 1.0f, 0.0f); //上頂點 9 glVertex3f(-1.0f, -1.0f, 0.0f); //左下 10 glVertex3f(1.0f, -1.0f, 0.0f); //右下 11 glEnd(); //三角形繪製結束 12 13 glTranslatef(3.0f, 0.0f, 0.0f); //
右移3.0單位 14 glBegin(GL_QUADS); //開始繪製四邊形 15 glVertex3f(-1.0f, 1.0f, 0.0f); //左上 16 glVertex3f(1.0f, 1.0f, 0.0f); //右上 17 glVertex3f(1.0f, -1.0f, 0.0f); //左下 18 glVertex3f(-1.0f, -1.0f, 0.0f); //右下 19 glEnd(); //四邊形繪製結束 20 }

當呼叫了glLoadIdentity()之後,我們實際上將當前點移到了螢幕中心,x軸從左到右,y軸從下到上,z軸從裡到外。其中,中心右面,上面,外面的座標值為正值。glTranslatef(x, y, z)沿著x,y和z軸移動,要注意,在glTranslatef(x, y, z)移動的時候,並不是相對螢幕中心移動,而是相對於當前所在的螢幕位置。
glBegin(GL_TRIANGLES)的意思是開始繪製三角形,glEnd()告訴OpenGL三角形已經建立好了。通常我們會需要畫3個頂點,可以使用GL_TRIANGLES;而要畫4個頂點時,使用GL_QUADS會更方便。最後,如果想要畫更多的頂點時,可以使用GL_POLYGON。

本節的簡單示例中,我們只畫了一個三角形。如果要畫第二個三角形的話,可以在這三點之後,再加三行程式碼(3點)。所以6點程式碼都應該包含在glBegin(GL_TRIANGLES)和glEnd()之間,這樣不會出現多餘的線,這是由於glBegin(GL_TRIANGLES)和glEnd()之間的點都是以3點為一個集合的。這同樣適用於四邊形。另一方面,多邊形可以由任意個頂點組成,繪製多邊形時不在乎glBegin(GL_POLYGON)和glEnd()之間或多少行程式碼。

glBegin()之後的第一行設定了多邊形的第一個頂點,glVertex的三個引數依次是x,y和z軸座標。glEnd()告訴OpenGL沒有其他點了,這樣將顯示一個填充的三角形。

然後類比畫出一個四邊形後,就可以執行程式看效果了!