標籤:
輸出圖元章節總結
發了好久第2章終於結束了,本章中討論的輸出圖元為使用直線、曲線、填充地區、單元陣列樣式和文本構造圖形提供了基本的工具。我們通過在笛卡兒全局座標系統中給出幾何描述來指定圖元。
用於沿線段路徑繪製像素的三種方法是DDA演算法、Bresenham演算法和中點演算法,Bresenham算法和中點演算法是等同的並且是最有效。沿線段路徑的像素的顏色位儲存按照遞增地計算記憶體位址的方式而有效完成。任何線段產生演算法都可以通過分割線段並將分割的線段分布到可用處理器上來獲得並行的實現。
圓和橢圓採用中點演算法並根據其對稱性進行有效而精確的掃描轉換。其他二次曲線(拋物線和雙曲線)也可以使用類似的方法進行繪製。分段的連續多項式的樣條曲線廣泛地應用於動畫和計算機輔助設計中。曲線產生的並行實現能通過與並行線段處理方法類似的方法來實現。
為了考慮顯示直線和曲線具有有限寬度的事實,我們必須調整對象的像素大小,使之與指定的幾何尺寸相一致。可以通過將像素位置看做在左下角的編址方法,或是通過調整直線長度的方法來實現。
一個
填充區是一個顯示成單色或彩色圖案的平面地區。但一般來說,我們可以用任何邊界來指定填充區。很多圖形軟體包僅允許凸多邊形填充區。這時,凹多邊形填充區可以通過分割成一組凸多邊形來顯示。三角形是最容易填充的多邊形,因為每條掃描線只和三角形的兩條邊相交(假定掃描線不和三角形頂點相交)。
奇偶規則可用來判定平面地區的內點。其他一些方法也可用於定義對象內部,特別是不規則的自相交對象。一個有代表性的例子是非零環繞數規則。該規則比奇偶規則在處理用多個邊界定義的對象時更加靈活。我們還可以根據環繞數規則的變形,使用布爾操作來組合平面地區。
每一多邊形都有確定多邊形平面空間方向的
前向面和
後向面。該空間方向可用與多邊形平面正交的法向量來確定,並且從後向面指向前向面。可以從多邊形平面方程或使用平面上逆時針排列且其三個夾角均小於180度的三點求向量叉積來計演算法向量的分量。一個情境的所有座標值、空間方向和其他幾何資料分別放入頂點、邊和面片表中。
圖形軟體包中其他一些可用的圖元有圖案陣列和字串。圖案陣列可用於描述各種2D 圖形,包括使用矩形結構的二值或彩色值集合表達的字元集。字串用來為圖形提供標記。
使用OpenGL基本庫中的圖元函數可產生點、直線段、凸多邊形填充區和位元影像或像素圖的圖案
陣列。GLUT中有顯示字串的子程式。圓、橢圓和凸多邊形填充區等其他圖元能利用這些函數構造或逼近,也可利用GLU和GLUT的子程式產生。所有座標值在右手笛卡兒座標系統中用絕對坐標表示。描述情境的座標位置可在二維或三維參考系中給出。可以用整數或浮點數來給出座標值,也可用指向座標值數組的指標來表示位置。情境描述經觀察函數變換成視頻監視器等輸出裝置的二維顯示。除glRect函數外,頂點、線段或多邊形的每一位置均在glVertex函數中指定。定義每一圖元的一組glVertex函數用一對語句glBegin/glEnd來包含,其中的圖元類型根據作為glBegin函數的變數的符號常量來標識。在描述包含許多多邊形填充表面時,可以使用OpenGL頂點數組來指定幾何和其他資料,從而高效地產生顯示結果。
下面,列出OpenGL中產生輸出圖元的基本函數。某些相關子程式也在其中。
函數 描述
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- gluOrtho2D 指定二維全局座標系統
- glVertex* 選擇一座標位置。該函數必須放在glBegin/glEnd之間
- glBegin (GL_POINTS); 繪出一個或多個點,每個都在glVertex 函數中指定。該位置串用glEnd語句來結束
- glBegin (GL_LINES); 顯示一組直線段,其端點座標在glVertex函數中指定。該端點串最後由glEnd語句來結束
- glBegin (GL_LINE_STRIP); 顯示用與GL_LINES相同的結構所指定的折線
- glBegin (GL_LINE_LOOP); 顯示用與GL_LINES相同的結構所指定的封閉折線
- glRect* 顯示xy平面上的一個填充區
- glBegin (GL_POLYGON); 顯示一個填充多邊形,其頂點在glVertex中給出且由glEnd語句結束
- glBegin (GL_TRISNGLE_STRIP); 顯示一個填充三角形連環,其描述結構與GL_POLYGON相同
- glBegin (GL_TRIANGLE_FAN); 顯示一扇形的填充三角形連環,所有三角形都與第一頂點相連,其描述結構與GL_POLYGON相同
- glBegin (GL_QUADS); 顯示一組填充四邊形,其描述結構與GL_POLYGON相同
- glBegin (GL_QUAD_STRIP); 顯示一組填充四邊形帶,其描述結構與GL_POLYGON相同
- glEnableClientState (GL_VERTEX_ARRAY); 啟用OpenGL的頂點數組設施
- glVertexPointer (size,type,stride,array); 指定一座標值數組
- glDrawElements (prim,num,type,array); 從數組資料中顯示一指定圖元類型
- glNewList (listID,listMode); 把一組命令定義為一個顯示表,用glEndList語句結束
- glGenLists 產生一個或多個顯示表標識
- glIsList 確定一顯示表標識是否被使用的查詢函數
- glCallList 執行一個顯示表
- glListBase 指定顯示表標識數組的位移
- glCallLists 執行多個顯示表
- glDeleteLists 刪除指定的一串顯示表
- glRasterPos* 為幀緩衝指定一個二維或三維的當前位置。該位置用來作為位元影像和像素圖圖案的參考
- glBitmap(w, h, x0, y0, xShift, yShift, pattern); 指定要映射到與當前位置對應的像素位置的位元影像圖案
- glDrawPixels(w, h, type, format, pattern); 指定要映射到與當前位置對應的像素位置的像素圖圖案
- glDrawBuffer 選擇儲存像素圖的一個或多個緩衝
- glReadPixels 將一塊像素存人指定的數組
- glCopyPixels 將一塊像素從一個緩衝複製到另一個
- glLopicOp 在用常量GL_COLOR_LOGIC_OP啟用後選擇一種邏輯操作來組合兩個像素數組
- glutBitmapCharacter (font, char); 選擇一種字型和一個位元影像字元進行顯示
- glutStrokeCharacter (font, char); 選擇一種字型和一個輪廓字元進行顯示
- glutReshapeFunc 指定顯示視窗尺寸改變時的工作
電腦圖形學(二)輸出圖元_20_章節總結(上)