1. 程式人生 > >Android OpenGL ES基礎

Android OpenGL ES基礎

前言

此篇僅僅介紹一些概念,其他的內容,會在後面更新,後面內容會以仿抖音小視訊專案形式進行介紹。

什麼是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世界座標在這裡插入圖片描述
在這裡插入圖片描述

  • 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(取樣器,取樣點的座標)
  • 內建變數

    • 頂點著色器
      gl_Position vec4 頂點位置
    • 片元著色器
      gl_FragColor vec4 顏色
  • 其他
    precision lowp 低精度
    precision mediump 中精度
    precision highp 高精度
    比如:precision mediump float; float資料是中精度的

    對GLSL語言想有更深入的瞭解,可看這篇文章OpenGL中shader的使用