標籤:
OpenGL畫線函數
圖形軟體包一般都提供一個描述一條或多條直線段的函數,其中每一直線段由兩個端點座標位置定義。在OpenGL中,和選擇一個點位置一樣,我們使用glVertex函數選擇單個端點的座標位置。我們使用一對glBegin/g1End來引入一串端點位置。有三個OpenGL符號常量可用於指定如何把這一串端點位置串連成一組直線段。預設情況下,每一符號常量顯示白色實線。
使用圖元線常量GL_LINES可串連每一對相鄰端點而得到一組直線段。通常,這會導致一組未串連的線段,除非重複某些座標位置。如果只描述了一個端點則什麼也不會顯示,如果列出的端點數為奇數則最後一個不被處理。例如、如果我們有5個座標位置,標成p1到p5,每一個用二維數組表示,則下列程式能產生圖3.4(a)。
glBegin(GL_LINES); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); glVertex2iv(p4); glVertex2iv(p5);g1End();
這樣,我們在第一和第二座標位置之間得到一條直線段並在第三和第四位置間得到另一條直線段。此時,指定的端點數為奇數,因此最後一個座標位置被忽略。
使用OpenGL的圖元常量GL_LINE_STRIP,我們可獲得折線(polyline )。此時,顯示從第一個端點到最後一個端點之間一組首尾相連的線段。第一條線段在第一端點和第二端點之間顯示;第二條線段在第二端點和第三端點之間顯示;依次進行,直到最後一個端點。如果我們不列出至少兩個座標位置則什麼也不顯示。使用上例中的5個座標位置,我們用下列程式顯示圖3 .4(b)。
glBegin (GL_LINE_STRIP); glVertex2iv (p1); glVertex2iv (p2); glVertex2iv (p3); glVertex2iv (p4}; g1Vertex2iv (p5);glEnd();
第三個OpenGL圖元常量是產生封閉折線的GL_LINE_LOOP。它在前面的折線基礎上再增加了一條直線段,因此折線序列中最後一個端點與第一個端點相串連。圖3.4(c)給出了使用這一線選項的顯示。
glBegin(GL_LINE_LOOP); glVertex2iv(p1); glVertex2iv(p2); glVertex2iv(p3); g1Vertex2iv(p4); glVertex2iv(p5);g1End();
如前所述,全局座標系中描述的圖形部分最終要映射到輸出裝置的座標系統中。然後圖中的幾何資訊被掃描轉換到像素位置。下一節,我們將看到實現OpenGL畫線函數的掃描轉換演算法。
電腦圖形學(二)輸出圖元_2_ OpenGL畫線函數