OpenGL--基礎知識(1)

1.基礎渲染管線

在OpenGL中,最基礎的元素就是點,一些點組合在一起,按照預定的方式連線,另外加上光照、貼圖、顏色等就組成了我們在屏幕上所看到的圖形圖像。例如,一個頂點的基礎就是一個點,只是這個頂點包含位置、顏色等屬性;一個三角形的基礎就是三個點,按照預定的方式進行連線。我們來看一個大致的渲染流程圖(摘自OpenGL SuperBible):
在這裏插入圖片描述

這是一個簡化版本,我們可以看到,渲染管線把三個頂點輸入頂點着色器中,新手暫時不用管頂點着色器是什麼,只需要知道這是一個類似方法(函數)的東西,輸入3個頂點及其附帶的屬性,輸出一個連線的三角形。它也可以應用顏色,一個或多個紋理,並移動它們,這條管道也是可編程的,可以編寫兩個由圖形硬件執行的程序來處理頂點數據並填充屏幕上的像素(稱爲片段着色器,實際上每個像素可以有多個片段)

2.Shaders

上圖中最大的兩個框框中的處理,VertexShader(頂點着色器) FragmentShader(片元着色器)

VertexShader(頂點着色器)

頂點着色器處理來自Client(客戶端)的傳入數據,頂點着色器將位置信息進行轉換,如應用數學運算來計算光照效果、位移、顏色值等等。要呈現一個有三個頂點的三角形,頂點着色器要執行三次,每個頂點執行一次,不過現在的硬件,有多個單元可以同時計算,三個頂點可以同時被處理

FragmentShader(片元着色器)

經過頂點着色器以後,現在可以對三個頂點進行光柵化。將這三個頂點放在一起,然後將三角形逐段柵格化。通過執行片段着色器填充每個片段,它輸出我們將在屏幕上看到的最終顏色值。今天的硬件是大規模並行的,很有可能有多個這樣的片段程序可以同時執行。


當然,想要見證奇蹟發生,我們必須向這些着色器提供一些數據。我們有三種方式將數據傳遞給OpenGL着色器進行呈現:Attributes、Uniforms、Texture

Attributes

Attributes用於經常改變的數據,只可用於頂點着色器,例如,頂點位置本質上是頂點的一個位置屬性。屬性變量可以是float int boolean數據,經常存儲爲一個4維向量。但是我們也能用3維甚至是2維。例如,一個頂點位置大部分都是3維向量,即x,y,z,OpenGL設置一個第四維W,爲1。例如,當我們在一個2d平面上顯示位置時,活忽略z軸,或者設置爲0,第四維變量會設置成1。當我們只傳送一個數據時,y,z都會設置爲0,w設置爲1。除了空間中的位置外,每個頂點還可能發生的其他變化包括紋理座標、顏色值和用於照明計算的表面法線等等

Uniforms

Uniforms用於不經常更改的信息,用於頂點着色器和片元着色器。通常在發送渲染指令之前發送uniform變量。我們可以設置應用於整個表面的單個顏色值,也可以設置一個時間值,以執行某種類型的頂點動畫(請注意,均勻的更改是每批一次,而不是這裏的每一個頂點一次),最常見的用途就是設置轉換矩陣。

Texture

紋理值可以從頂點和片段着色器中採樣和過濾。片段着色器通常對紋理進行採樣,以便在三角形的表面應用圖像數據。大多數圖像文件格式以無符號字節值(每個顏色通道8個字節)存儲顏色。

Outs

out變量聲明爲一個着色器階段的輸出,並在隨後的着色器階段聲明爲in即作爲隨後着色器的輸入。Client不能訪問這些內部變量,而是在頂點和片段着色器(可能還有可選的幾何着色器)中聲明它們。頂點着色器爲out變量分配一個值,該值是常量,或者可以在光柵化時在頂點之間插入。在同名變量中對應的fragment着色器接收此常量。

3.座標系統

在3D圖形中,我們經常用的兩種投影方式就是正交投影和透視投影。這些投影方式,或者說座標系的類型,實際上只是一個特殊形成的4x4變換矩陣。在計算機三維圖像中,投影可以看作是一種將三維座標變換爲二維座標的方法。簡單地說,我們需要這些類型之一的投影矩陣在適當的座標系中呈現幾何圖形。如果不使用這些矩陣中的任何一個,將得到一個默認的正交投影,其中軸的範圍僅爲-1.0到1.0。

Orthographic Projections (正交投影)

通常,我們經常在2D中用正交投影,保持z軸爲0。當然,z軸可以擴展到我們想要的任何長度。下圖顯示了一個在所有三個方向上從-100延伸到+100的正投影示例。這個投影包含所有的幾何圖形,如果我們在視野外查看指定幾何形狀,則會對其進行剪切,這意味着它實際上是沿着視野的邊界進行剪切的。在正交投影中,落在這個空間內的所有東西都顯示在屏幕上,沒有相機或眼睛座標系的概念。正交投影多用於建模等,投影不會改變其模型大小。

Perspective Projections(透視投影)

透視投影是爲了獲得接近真實三維物體的視覺效果而在二維的紙或者畫布平面上繪圖或者渲染的一種方法。它具有消失感、距離感、相同大小的形體呈現出有規律的變化等一系列的透視特性,能逼真地反映形體的空間形象。透視投影通常用於動畫、視覺仿真以及其它許多具有真實性反映的方面。
在這裏插入圖片描述

基本的透視投影模型由視點Observer、near近平面和far遠平面(遠平面可以是無限遠,在這裏我們設定一個值便於理解),三部分構成(要求Observer不在near上),稱爲視椎體。Observer可以認爲是觀察者的位置,也是觀察三維世界的角度。near近平面一般被認爲渲染三維對象透視圖的二維平面。對於世界即near和far之間中的任一點X,構造一條起點爲Observer並經過X點的射線R,R與平面near的交點Xp即是X點的透視投影結果。三維世界的物體可以看作是由點集合{Xi} 構成的,這樣依次構造起點爲Observer,並經過點Xi的射線Ri,這些射線與視平面fnear的交點集合便是三維世界在當前視點的透視圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章