opengl es3.0學習啓動篇一:opengl es簡介

學習資料: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實現了具備可編程着色功能的圖形管線,圖形管線以下所示:學習

api

上面的圖片展現了圖形管線的各個階段,能夠看到上面由頂點着色器,片斷着色器,圖元裝配等等一系列的階段,下面就對各個階段作個介紹。測試

頂點着色器

頂點着色器輸入包括:.net

  • 着色器程序:描述頂點上執行操做的頂點着色器程序源代碼或者可執行文件
  • 頂點着色器輸入:用頂點數組提供的每一個頂點的數據
  • 統一變量(uniform):頂點着色器使用的不變的數據
  • 採樣器:表明頂點着色器使用紋理的特殊統一變量類型

頂點着色器的輸出在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軸。

coordinate

舉個例子:不考慮Z軸,若是點爲(-2,-2)則在圖元裝配期間則被拋棄。

光柵化

此階段繪製對應的圖元(點,線,三角形)。光柵化是將圖元轉換爲一組二維片斷的過程。而後這些片斷交由片斷着色器處理,這些二維片斷表明在屏幕上繪製的像素。 圖元

片斷着色器

片斷着色器對光柵化階段生成的每一個片斷進行着色處理,採用以下輸入:

  • 着色器程序:描述片斷所執行操做的片斷着色器程序源代碼或者可執行文件
  • 輸入變量:光柵化單元用插值爲每一個片斷生成的頂點着色器輸出
  • 統一變量:片斷(或頂點)着色器使用的不變的數據
  • 採樣器:表明片斷着色器所用紋理的特殊統一變量類型

示例:

precision mediump float;//精度類型
in vec4 v_color;//接收頂點着色器傳遞的v_color;輸入
out vec4 fragColor;//輸出變量
void main(){
    fragColor=v_color;
}

逐片斷操做

圖示以下: 逐片斷

  • 像素歸屬測試:肯定幀緩衝區中位置的像素是否歸當前的上下文全部,如一個顯示opengl es幀緩衝區窗口的窗口受被另外一個窗口遮蓋,若是被遮蓋了,則不顯示當前像素。該項功能有opengl es內部控制
  • 裁剪測試:是否位於做opengl es的一部分裁剪矩形內,不屬於則拋棄
  • 模板和深度測試:在輸入片斷的模板和深度值上測試,已肯定片斷是否該拒絕
  • 混合:將新生成的片斷顏色值與保存在幀緩衝區位置的顏色值組合起來。
  • 抖動:抖動可用於最小化由於使用有限精度在幀緩衝區保存顏色值而產生僞值。
相關文章
相關標籤/搜索