iOS OpenGL開發(二) - 着色器渲染流程

OpenGL

前言

第一篇咱們提到了不少的着色器相關的名詞,那麼什麼是着色器呢?着色器他們又有一個什麼樣的流程呢?着色器分哪些種類呢?不一樣的着色器分別有什麼功能呢?咱們就帶着這些問題,開啓咱們這一片文章的內容。編程

一、着色器的基本認識

講到着色器,咱們首先提到的應該會圖元,那麼什麼是圖元呢?編程語言

圖元:組成圖像的基本單元。測試

那麼說完圖元,咱們就要說說渲染管線了,怎麼理解渲染管線呢?設計

OpenGL渲染管線:一系列有序處理階段的序列,用於把咱們應用中的數據轉化到OpenGL生成一個最終的圖像的一個過程。3d

怎麼理解?其實咱們能夠把管線想象稱爲一個流水線,流水線上面的每一個過程都是固定好了的,順序不能錯亂的,那麼咱們把流水線上面的一個工人或者是機器設備就能夠理解爲一個着色器。那麼咱們怎麼去指揮流水線工人或者是流水線上的機器幹活呢?咱們就須要有一種交流溝通的命令,這個命令咱們就能夠理解爲是專門爲圖形開發設計的編程語言,也就是咱們常說的GLSLcdn

二、着色器的分類

  • 頂點着色器(必要):是最初用來處理頂點座標的,通常會對座標作一些計算
  • 細分着色器(可選):描述物體的形狀,在管線中生成新的幾何體處理(平順)模型生成最終形態
  • 幾何着色器(可選):是對原座標進行一些修改,我的感受適用於一些特效
  • 片元着色器(必要):是對圖形進行塗色,並最終輸出 其中頂點着色器和片元着色器是咱們必需要要使用的,然而細分着色器和幾何着色器咱們是可選的,通常用的不多。

三、着色器的渲染流程

第一節裏面提到了渲染管線,其實咱們能夠理解就是着色器的渲染流程。下面一幅圖就是着色器的渲染流程 blog

着色器渲染流程
流程:

  • 拿到頂點數據傳給頂點着色器,頂點着色器根據你的投影等等不一樣的狀況進行處理一番
  • 頂點着色器處理完了以後交給細分着色器,生成新的幾何體處理(平順)模型生成最終形態,對全部的圖像進行修改幾何圖元類型或者放棄全部的凸緣
  • 而後交給幾何着色器對原座標進行一些修改(通常用於特效方面的)
  • 接着進行圖元設置,其實能夠理解爲描述圖片到底長啥樣
  • 接下來進行剪切,剪切顧名思義就是剪切視口以外的繪製
  • 下面就是光柵化,光柵化就是輸入圖元的數學描述,轉化爲與屏幕對應的位置像素片元。其實很好理解,就是把這個圖片切成一個個的像素點而後交給片元着色器
  • 片元着色器就會處理每個像素點,給每個像素點進行着色,其實就是片元顏色以及深度值傳遞到片元測試和混合模塊。因此說有多少個像素點就要執行多少次片元着色器。

四、管線

其實咱們通俗的理解,上面說的這個流程就是管線。管線也是分兩類的:圖片

  • 固定管線:OpenGL剛出來的時候,你們都是用的固定管線,就是全部的流程都是固定死了的,你就只能按照這個順序來,中間的過程你不用管。可是隨着後面的業務場景愈來愈豐富,固定管線已經沒法知足需求了,因而出現了可編程管線。
  • 可編程管線:顧名思義就是能夠編程的管線,那麼哪一些着色器是能夠編程的呢?到目前爲止,咱們可以經過GLSL語言編程的着色器是頂點着色器和片元着色器。
相關文章
相關標籤/搜索