圖形圖像世界

OpenGL ES 的架構圖
OpenGL ES 的架構圖

計算機圖形學的發(fā)展并不存在標準的編程模型秆撮,開發(fā)商們都僅提供自家的硬件底層接口他宛。個人和組織開發(fā)特定的屏幕顯示內容船侧,然而在高效性和可移值性均存在問題。在最初的群魔亂舞的情況下厅各,使得我們有了更高的需求镜撩,最后圖形引擎的步伐加快同時在計算機世界形成了一套圖形API---OpenGL。

  • openGL的從現(xiàn)實物理學队塘,特別現(xiàn)代的光學成像系統(tǒng)角度來進行深度思考袁梗。
  • openGL完成了從想象到計算機視圖的過程,之間經過多種變換過程憔古。

光學成像系統(tǒng)

對于同一個世界的物體遮怜,其最終經過成像系統(tǒng)生成具體的圖像特征需要一套完成的成像系統(tǒng)。

  1. 對象:輪廓鸿市,材質锯梁,顏色等
  2. 觀察者: 眼睛,照相機等數(shù)字化設備
  3. 外部條件:光源焰情,天氣情況

圖像的確定依賴觀察者陌凳,因此虛擬的成像系統(tǒng)中必須有對象與觀察者、外部條件的關聯(lián)方法内舟。在成像模型中冯遂,可以進行幾何變換(小孔成像)等,并不是所有的物體最終都能完整的在膠片中成像(進行窗口移動裁剪)谒获,給定投影位置和裁剪窗口大小蛤肌,便能確定可以出現(xiàn)的圖像。

OpenGL的實現(xiàn)

計算機圖形學考慮人造對象的概念批狱,模擬我們的現(xiàn)實生活環(huán)境裸准,人們通過,點赔硫,線炒俱,多邊形來構造對象。其流程大概如下:
首先構想我們需要顯示的對象模型,然后根據宏觀世界中的表現(xiàn)形態(tài)轉換成以我們的眼睛為觀察者的顯示权悟,通過成像系統(tǒng)的投影砸王,根據顯示設備的大小進行一定的裁剪處理,適應不同的計算機不同的窗口顯示峦阁,最終形成我們在計算機設備上的構想對象的縮影谦铃。
而其中經歷的變換過程,OpenGL管線 中對應一套處理過程榔昔,上圖主要是對于移動嵌入設備的流程院喜。


---建模函數(shù)--->模型空間(模型坐標)--建模轉換--->世界空間(世界坐標系)--視見轉換->眼睛空間(眼坐標)---投影變換--->剪彩空間(標準化設備坐標)---視口變換--->屏幕坐標


可能有些?會認為,為何要經過?一個世界坐標凡人。為何不直接對模型坐標進?投影,?成圖像那不也是可以的嗎,為什么需要世界坐標的存在行瑞?

當程序有上百個單獨的對象的時候,你要對這個復雜模型進??次性的建氖叻龋基本是不可能的,你的坐標系怎么取也?無法兼顧到能完美的構建每?個物體,所以你必須為每?件物體進?行單獨建模。那么這樣問題就來了,這么多的對象诵肛。如果不通過?個中間體統(tǒng)一的話,怎么直接進行大量工作的處理屹培。

編程實現(xiàn)GLSL

大家都知道 2.0是從1.0的固定管線引入圖像編程機制,包括頂點著色器怔檩,片元著色器以及GLSL語言褪秀,增加了可編程管線滿足開發(fā)需求和呈現(xiàn)能力和渲染性能(頂點緩沖區(qū)對象減少CPU和顯卡之間的交互VBO。珠洗。溜歪。)可編程的腳本語言GLSL(Shader Language)實現(xiàn)以嵌入式 OpenGL-ES 2.0 ios中的為例:

簡單的頂點著色器和片元著色器腳本(沒有對應使用):

uniform mat4 Projection; 
uniform mat4 ModelView;
attribute vec4 Position;
varying vec4 DestinationColor; 
attribute vec4 SourceColor;
void main(void) 
{
   gl_Position = (Projection * (ModelView * Position));
   DestinationColor =SourceColor;
}
precision mediump float;
varying vec4 DestinationColor; 
void main()
{
  gl_FragColor = DestinationColor;
}

顧名思義,頂點著色器和片元著色器處理流程對應上圖许蓖,主要進行頂點變換,顏色輸出蝴猪,GLSL語法很簡單,易上手想要改變世界的可以上手操作了膊爪。

對應OpenGL成像的流程自阱,openGL-ES結構圖詳解:

Vertex Array/Buffer objects:頂點數(shù)據來源,這時渲染管線的頂點輸入米酬,通常使用 Buffer objects效率更好沛豌。

Vertex Shader:頂點著色器通過可編程的方式實現(xiàn)對頂點的操作,如進行坐標空間轉換赃额,計算法線加派,頂點顏色以及紋理坐標;

Primitive Assembly:圖元裝配跳芳,經過著色器處理之后的頂點在圖片裝配階段被裝配為基本圖元芍锦。OpenGL ES支持三種基本圖元:點,線和三角形飞盆,它們是可被 OpenGL ES 渲染的娄琉。接著對裝配好的圖元進行裁剪(clip):保留完全在視錐體中的圖元次乓,丟棄完全不在視錐體中的圖元,對一半在一半不在的圖元進行裁剪孽水;接著再對在視錐體中的圖元進行剔除處理(cull):這個過程可編碼來決定是剔除正面票腰,背面還是全部剔除。

Rasterization:光柵化女气。在光柵化階段杏慰,基本圖元被轉換為二維的片元(fragment),fragment 表示可以被渲染到屏幕上的像素主卫,它包含位置逃默,顏色鹃愤,紋理坐標等信息簇搅,這些值是由圖元的頂點信息進行插值計算得到的。這些片元接著被送到片元著色器中處理软吐。

*光柵化是 頂點著色器到片元著色器的過渡即腳本中的 輸出和輸入瘩将。

Fragment Shader:片元著色器通過可編程的方式實現(xiàn)對片元的操作。在這一階段它接受光柵化處理之后的fragment凹耙,color姿现,深度值,模版值作為輸入肖抱。

Per-Fragment Operation:在這一階段對片元著色器輸出的每一個片元進行一系列測試與處理备典,從而決定最終用于渲染的像素。(像素檢測意述,剪裁測試提佣,模板測試,深度測試荤崇,混合等)

*混合是將片段的顏色和幀緩沖區(qū)中已有的顏色值進行混合拌屏,并將混合所得的新值寫入幀緩沖,其中包含各種混合模式术荤。

Framebuffer:存儲這可以用于渲染到屏幕或紋理中的像素值倚喂,也可以從中讀回像素值,可以進行一些即時操作效果的處理瓣戚。


"程序員三大浪漫 : 操作系統(tǒng) 編譯原理 圖形學"

暫不爭論上述描述端圈,圖像學單獨一門學科,一篇文章不能夠將現(xiàn)實世界到計算機世界圖像處理顯示過程描述完整子库,歡迎大家指正舱权。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刚照,隨后出現(xiàn)的幾起案子刑巧,更是在濱河造成了極大的恐慌喧兄,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啊楚,死亡現(xiàn)場離奇詭異吠冤,居然都是意外死亡,警方通過查閱死者的電腦和手機恭理,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門拯辙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颜价,你說我怎么就攤上這事涯保。” “怎么了周伦?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵夕春,是天一觀的道長。 經常有香客問我专挪,道長及志,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任寨腔,我火速辦了婚禮速侈,結果婚禮上,老公的妹妹穿的比我還像新娘迫卢。我一直安慰自己倚搬,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布乾蛤。 她就那樣靜靜地躺著每界,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幻捏。 梳的紋絲不亂的頭發(fā)上盆犁,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音篡九,去河邊找鬼谐岁。 笑死,一個胖子當著我的面吹牛榛臼,可吹牛的內容都是我干的伊佃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼沛善,長吁一口氣:“原來是場噩夢啊……” “哼航揉!你這毒婦竟也來了?” 一聲冷哼從身側響起金刁,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤帅涂,失蹤者是張志新(化名)和其女友劉穎议薪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳友,經...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡斯议,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了醇锚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哼御。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖焊唬,靈堂內的尸體忽然破棺而出恋昼,到底是詐尸還是另有隱情,我是刑警寧澤赶促,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布液肌,位于F島的核電站,受9級特大地震影響芳杏,放射性物質發(fā)生泄漏矩屁。R本人自食惡果不足惜辟宗,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一爵赵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泊脐,春花似錦空幻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缩挑,卻和暖如春但两,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背供置。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工谨湘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芥丧。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓紧阔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親续担。 傳聞我的和親對象是個殘疾皇子擅耽,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容