頂點 (電腦圖學)

電腦圖學中,頂點是儲存一系列基本繪圖所需屬性的基本元素,例如二維或三維空間中的點、或曲面上的多個點。在著色器中,與頂點相連的元素稱為圖元,圖元內部應上色的區域稱為片段,頂點的集合稱為頂點組或頂點陣列。[1]而在OpenGL中,頂點預設會包含位置、法向量、顏色、第二色彩、紋理座標等屬性[2],而其可以透過著色器編程添加更多屬性。

圖中的頂點包含了顏色資訊,分別為紅、綠、藍,通過渲染流程後會輸出一個漸變色彩的三角形。

與幾何學的關聯

電腦圖學中,三維模型通常會表示為以三角形構成的多面體,其中,頂點所包含的資訊不像幾何學中只含有座標資訊,而會額外地包含其渲染所需的資訊,如顏色、反射特性、紋理和表面法線等[3]。電腦圖學中的頂點同樣可以如同幾何學構造與頂點相連的邊,然而多邊形並非由多個邊組成的封閉結構,而是多個頂點依序圍出的結構,並構成面,而以上組合在電腦圖學中有一個專有名詞,稱為圖元。

應用於三維模型

圖中右側可以理解為使用原始頂點資訊繪製出的斯坦福兔子圖象,而左側是透過頂點所提供的渲染資訊內插產生的結果

在電腦圖學中,一般的三維模型通常可以通過曲面細分將非三角形曲面轉換為三角形陣列。而三維模型通常是透過在圖元上依據頂點性質內插出資料以渲染出最後的立體。[4]

頂點屬性

在電腦圖學中,三角形多邊形的頂點不僅與空間位置相關聯,而且也需要提供正確渲染物件所需的其他值或關聯資訊。這些資訊稱為頂點屬性(Vertex attributes)。頂點的大多數屬性表示渲染所需的空間向量。這些向量通常可能是一維(x)、二維(x,y)或三維(x,y,z)的向量,並會包含一個齊次座標的維度(w)。這些值通常可以代表要繪製的物件之材質(material)的描述。這些數據通常會在頂點著色器或頂點處理流程中被使用。[4]

常見的頂點屬性包括:

頂點位置
對應到二維或三維空間的頂點位置資訊[2]
頂點顏色
通常為鏡面反射或漫反射的顏色值,表示物體的表面顏色或預先計算的照明資訊。一般以RGB色彩空間表示。[2]
反射率
例如頂點所處表面的鏡面指數、金屬度、菲涅耳值等資訊。[5]
紋理座標
用於決定如何將紋理正確渲染所需的座標值。[2]
法向量
法向量可以用於定義了頂點位置處近似曲面[6][7],用於光照計算(例如Phong著色法[8][9]、法線貼圖、位移貼圖以及控制曲面細分。[2]
切線向量
與法向量垂直的向量,用於部分的法線貼圖、位移貼圖以及控制曲面細分。[10]
骨架權重
儲存用於繪製骨骼动画所需的資訊。[11]

用途

頂點包含的資料通常是提供渲染物件所需。在早期版本的OpenGL中,頂點能包含的資料種類是固定的,並且要在起始函數的呼叫以及終止函數的呼叫之間依序傳入每個頂點的資料,在OpenGL 1.0中起始函數為glBegin、終止函數為glEnd[12]。最初電腦圖學中的頂點定義與幾何學類似,只包含空間位置資訊,並且要透過glVertex傳入資料[13]。顏色參數是額外的一個狀態變數,指定一次後後續會沿用先前最後一次給定的顏色[14]。關於其他的頂點屬性則是要在每個頂點定義glVertex之前給出[15]。而後來出現了著色器的概念[16],使得頂點定義能夠直接被程式開發人員決定。頂點的各項屬性被依序存入緩衝器中,並且輸入到頂點著色器中,頂點著色器中定義的每一個被標記為attribute的變數都是一個頂點的屬性,透過客製化這些屬性可以讓一些較複雜的演算法跟隨渲染流程一同完成,例如等值立方搜尋演算法英语Marching cubes[17]

參見

參考文獻