可視化編程中的幾個基礎概念及我的理解

紋理

可將紋理簡單理解一張圖片。用來修改由光柵化產生的片元顏色的圖像。將紋理貼到圖元的過程,稱爲紋理映射。
紋素:紋理元素,紋素從紋理內存中得到,表示的是將紋理貼到相應片元上的顏色。也就是說,紋素可簡單理解爲一個顏色值,根據使用環境的不一樣,其值(RGB狀況下)有多是(0-1)或者(0-255)。
紋理單元:可簡單理解爲紋理的索引,一個紋理單元與一個紋理圖像相互對應綁定,控制着該紋理圖像的處理步驟,一個紋理單元在一個紋理通道中維護紋理的各類狀態,如:濾波、環繞方式、環境、紋理座標等。在Mipmap中,多重紋理包含一組連續的紋理單元。Mipmap在opengl或者osg中顯示時,相似於數據金字塔,即:當可視化對象距離視角越近,圖像像素越高,看到的圖像也就越清晰,當距離視角較遠時,像素質量下降。
紋理採樣器:在着色器中,用來從紋理採樣的一種變量。編程

關係:紋理單元的主要目的是讓咱們在着色器中可使用多於一個的紋理。經過把紋理單元賦值給採樣器,咱們能夠一次綁定多個紋理,只要咱們首先激活對應的紋理單元。segmentfault

經過關聯一個採樣器變量和一個紋理單元,使用GLSL的內置函數(texrure)從紋理圖像中提取紋素(顏色值),相似將紋理對象綁定到紋理單元,將採樣器對象綁定到採樣器單元。採樣器變量和紋理結合是經過紋理單元來相互對應的。緩存

建立和初始化紋理對象後,在應用程序中能夠經過着色器來訪問紋理(圖像)中的數據。着色器中的紋理用紋理採樣器表示。將紋理綁定到紋理單元,採樣器對象綁定到採樣器單元(應用成程序中是經過紋理單元鏈接在一塊兒的),他們一塊兒用來從紋理圖像中提取數據,稱爲採樣,採樣經過GLSL的內置函數texture及其多種重載函數來執行。
一個簡單的片斷(也稱片元)着色器:函數

#version 330 core
uniform sampler2D tex;
in vec2 vs;
layout(location  =0) out vec4 color;
void main()
{
    color=texture(tex,vs);
}

只單純看該片元着色器,聲明瞭一個uniform變量的均勻採樣器tex,該段着色器的輸入變量(紋理座標)是相對應頂點着色的同名輸出變量vs,在glsl的主程序中,內置函數texture依據紋理座標和採樣器提取紋素。
從上述片斷着色器中,能夠看出texture函數的返回值是vec4類型。
看經常使用的一個texture的聲明:測試

Gvec4 texture(gsampler2D tex,vec2 P[,float,bias]);

表示用紋理座標P,從綁定到sampler2D當前紋理中做紋理查找(不考慮陰影及比較操做,bias參數暫時不考慮),texture函數的返回值是一個顏色值,也就說返回的vec4對象的各個元素值應該在0~1之間。code

緩衝

雙緩衝:在可視化設備上展示在咱們眼前的圖像並非一會兒生成的,而是按照從左到右,從上到下逐像素繪製的,並不是瞬間顯示。
應用雙緩衝渲染窗口程序。前緩衝存儲的最終圖像,全部的渲染指令放在後緩衝中繪製。當全部渲染指令執行完畢以後,交換先後緩衝,即雙緩衝繪製。這樣可避免 顯示圖像閃爍等問題。orm

Alpha測試與Blend融混

Alpha測試與其餘測試(深度、模板等)同樣,只是單純的比較值的大小,若是經過Alpha的測試值,則像素被繪製,不然不被繪製。
opengl中若是一個輸入的片元經過了全部的測試,那麼它就能夠與顏色緩衝中當前的顏色值經過某種方式進行合併,即:將幀緩存當中的已有的顏色值與輸入的片元顏色進行混合--這個過程稱爲融混。 融混一般與Alpha值相關。對象

opengl中測試順序是:剪裁測試、Alpha測試、模板測試、深度測試。若是某項測試不經過,則被捨棄,而只有全部測試都經過的狀況下才會執行混合操做。
:所謂裁剪測試,是指在當前視口中指定一個繪製區域(如視口的寬高爲800600,可是隻在400300的矩形窗口中繪製(以視口左下角爲起點)),在該繪製區域以外的圖元捨棄,繪製窗口以內的進行下一步的操做。索引

顯而易見:融混操做是最終顯示在屏幕以前的最後一個步驟,進行融混後最終顏色才被顯示。
在開啓Alpha測試的狀況下,透明像素沒法經過該測試,後續的模板和深度測試也不會被執行。若使用混合,即便透明像素也要通過模板和深度等測試才能顯示在屏幕上(雖然是透明的,但依然通過了計算)。圖片

所以,若是全部的像素都是「透明」或「不透明」,沒有「半透明」時,應該儘可能採用Alpha測試而不是採用混合操做,這樣有助於提升計算效率。當須要繪製半透明像素時,才採用混合操做。
https://segmentfault.com/a/11... 渲染順序。

對opengl渲染管線流程進一步細化;
頂點數據-->頂點着色器-->細分着色器-->幾何着色器-->圖元設置-->剪切-->光柵化-->片元着色器-->測試(Alpha-->模板-->深度)-->融混-->可視化顯示
其中,頂點着色器和片斷着色器階段是我的可視化編程必不可少的階段。
注意:光柵化是一個決定哪些像素被幾何圖元覆蓋的過程,光柵化的結果是像素位置的集合和片斷的集合(光柵化產生的結果是片元,由於光柵化的後一個階段就是片元着色器階段,片元着色器的主要做用就是將紋理像素貼到片元上,可見,光柵化的結果--片元,是一個「候選像素」,也就是準備着色的地方)。當光柵化後,一個圖元擁有的頂點數目和產生的片斷之間沒有任何關係。好比:一個有三個頂點組成的三角形能夠佔據整個屏幕,可是卻須要上百萬個片斷。

相關文章
相關標籤/搜索