Android OpenGL ES基礎
阿新 • • 發佈:2018-12-06
前言
此篇僅僅介紹一些概念,其他的內容,會在後面更新,後面內容會以仿抖音小視訊專案形式進行介紹。
什麼是OpenGL ES
OpenGL :Open Graphics Library
- 圖形領域的工業標準,是一套跨程式語言、跨平臺的、專業的圖形程式設計(軟體)介面。它主要用於二維、三維影象,是一個功能強大,呼叫方便的底層圖形庫。
- 與硬體無關,可以在不同平臺比如Android,Mac,Windows,IOS等之間進行移植
OpenGL ES(OpenGL for Embedded Systems)
- 針對手機、PDA和遊戲主機等嵌入式裝置而設計的OpenGL API子集
什麼是EGL
EGL實際就是OpenGL和裝置之間的中介軟體,OpenGL實際就是一個可跨平臺的操作GPU的API,但是OpenGL需要和本地視窗進行互動,這時候就需要一箇中間控制層來進行連線,而這個中間控制層就是EGL
OpenGL的繪製流程
首先需要獲取頂點資料,然後將頂點資料傳遞給頂點著色器,頂點著色器根據這些頂點資料確定圖元頂點位置
進行圖元裝配,在這一階段,執行裁剪、透視分割和視口變換操作。
光柵化實際就是將一個圖元變化成一個二維影象(片元),二維影象上每個點包含了顏色、深度和紋理資訊。
光柵化實際就是將幾何資料經過一系列變換後最終變換成畫素,從而顯示到裝置上。本質其實就是座標變換,幾何離散化。
一句話概括就是將幾何資訊轉換成一個個的柵格組成的影象的過程。
片元著色器處理光、陰影等對影象的影響,從而進行顏色填充,然後對每個片元進行處理,最後幀快取。
實際OpenGL最終目的就是實現幀快取。
OpenGL座標系
- OpenGL世界座標,取值範圍[-1,1], 在OpenGL中用來確定形狀的,頂點位置座標就是按照這個座標來給的
- 紋理座標,取值範圍[0,1],在OpenGL進行紋理的操作,是根據這個座標來操作的。
- Android螢幕座標,取值範圍[0,1],根據裝置螢幕的座標,來顯示OpenGL中的內容。
Shader著色器
- 著色器(Shader)是執行在GPU上的小程式
- 頂點著色器
- 如何處理頂點、法線等資料的小程式 - 片元著色器
- 如何處理光、陰影、遮擋、環境等等對物體表面的影響,最終生成一副影象的小程式
GLSL語言
- OpenGL SL(OpenGL Shading Language)OpenGL的著色語言,是一種類C語言,寫法和風格和C類似。
- 在OpenGL中有頂點著色器和片元著色器。
- 頂點著色器是用於繪製頂點位置(VertexShader)
GLSL中的基礎內容
-
資料型別
- float 浮點型
- vec2 含有兩個浮點型資料的向量
- vec4 含有四個浮點型資料的向量
- sampler2D 2D紋理取樣器(代表一層紋理)
-
修飾符
- attribute 屬性變數。只能用於頂點著色器中。 一般用該變數來表示一些頂點資料,如:頂點座標、紋理座標、顏色等。
- uniforms 一致變數。在著色器執行期間一致變數的值是不變的。與const常量不同的是,這個值在編譯時期是未知的是由著色器外部初始化的。
- varying 易變變數。是從頂點著色器傳遞到片元著色器的資料變數。
-
內建函式
- texture2D (取樣器 座標) 取樣指定位置的紋理
texture2D(取樣器,取樣點的座標)
- texture2D (取樣器 座標) 取樣指定位置的紋理
-
內建變數
- 頂點著色器
gl_Position vec4 頂點位置 - 片元著色器
gl_FragColor vec4 顏色
- 頂點著色器
-
其他
precision lowp 低精度
precision mediump 中精度
precision highp 高精度
比如:precision mediump float; float資料是中精度的對GLSL語言想有更深入的瞭解,可看這篇文章OpenGL中shader的使用