學習資料:c++
OpenGL ES 3.0編程指南編程
https://blog.csdn.net/yellowcath/article/details/46534559api
opengl es是Khronos組織創立的API套裝之一,咱們只要調用對應的api就能夠寫出各類炫麗的圖形效果。本系列博客基於opengl es3.0進行代碼編寫,主要運行於Android系統上。數組
opengl es3.0實現了具備可編程着色功能的圖形管線,圖形管線以下所示:學習
上面的圖片展現了圖形管線的各個階段,能夠看到上面由頂點着色器,片斷着色器,圖元裝配等等一系列的階段,下面就對各個階段作個介紹。測試
頂點着色器輸入包括:.net
頂點着色器的輸出在opengl es2.0版本使用的是varying變量,3.0中更名爲頂點着色器輸出變量。在圖元光柵階段,爲每一個生成的片斷計算頂點着色器輸出值,而且做爲輸入值傳遞給片斷着色器。code
示例:orm
uniform mat4 u_mvpMatrix; in vec4 a_position;//輸入,來自外部程序 in vec4 a_color;//輸入,來自外部程序 out vec4 c_color;//輸出,片斷着色器接收 void main(){ v_color=a_color; gl_Position=u_mvpMatrix*a_position; }
圖元是三角形,點,線等幾何對象,在opengl es中全部的圖形用這三種基本元素來組成,如正方形用兩個三角形就能夠表示。頂點着色器的點在此期間會進行組成成圖元。對象
對於每一個圖元,須要肯定的是是否在視椎體(屏幕可見的3D空間區域)內,若是沒有徹底在區域內,則須要被裁減,區域外則被拋棄,計算後將頂點轉換成屏幕座標。
在opengl以世界座標系爲基礎,即以屏幕中心爲(0,0),向右延伸X軸,向上延伸Y軸,這跟Android中的座標系不一樣,Android以左上角爲(0,0),向右延伸X軸,向下延伸Y軸。
舉個例子:不考慮Z軸,若是點爲(-2,-2)則在圖元裝配期間則被拋棄。
此階段繪製對應的圖元(點,線,三角形)。光柵化是將圖元轉換爲一組二維片斷的過程。而後這些片斷交由片斷着色器處理,這些二維片斷表明在屏幕上繪製的像素。
片斷着色器對光柵化階段生成的每一個片斷進行着色處理,採用以下輸入:
示例:
precision mediump float;//精度類型 in vec4 v_color;//接收頂點着色器傳遞的v_color;輸入 out vec4 fragColor;//輸出變量 void main(){ fragColor=v_color; }
圖示以下: