OpenGL
三維圖形API的子集,針對⼿手機、PDA和遊戲主機等嵌⼊式設備而設計,OpenGL ES
爲了支持新改進的方法拋棄了對於舊式的低效的內存複製操做的支持。DirectX
並非一個單純的圖形API。最重要的是DirectX
是屬於Windows
上⼀個多媒體處理API。並不支持Windows
之外的平臺,因此不是跨平臺框架。按照性質分類,能夠分爲四⼤大部分,顯示部分、聲⾳部分、輸入部分和網絡部分。Metal
,該技術可以爲3D圖像提升10倍的渲染性能。Metal
是Apple爲了解決3D渲染⽽而推出的框架。GPU:圖形處理單元,圖形卡上的可編程芯片,它是高度並行的,而且具備很是快的速度。可以結合幾何、顏色、燈光和其餘數據而產生一個屏幕圖像的硬件組件。算法
渲染:屏幕只有2維,所以顯示3D數據的技巧就在於產生可以迷惑眼睛使其看到丟失的第3維的一個圖像。將數學和圖形數據轉換成3D空間圖像的操做叫作渲染。編程
像素:在計算機上顯示的圖片是由矩形的顏色點組成的,這些矩形的顏色點叫作像素。單獨的像素,若是經過放大鏡仔細觀察顯示器,你會看到每一個像素都是由3個顏色元素組成的,即一個紅點、一個綠點和一個藍點。小程序
緩存:OpenGL ES
爲兩個內存區域間的數據交換定義了緩存(buffers
)的概念。緩存是指 圖形處理器可以控制和管理的連續RAM。數組
程序從 CPU 的內存複製數據到 OpenGL ES 的緩存。在 GPU 取得一個緩存的全部權之後,運行在 CPU 中的程序理想狀況下將不 再接觸這個緩存。經過控制獨佔的緩存,GPU 就可以儘量以最有效的方式讀寫內存。 圖形處理器把它處理大量數據的能力異步同時地應用到緩存上,這意味着在 GPU 使用 緩存中的數據工做的同時,運行在 CPU 中的程序能夠繼續執行。緩存
OpenGL上下文(context):用於配置OpenGL的保存在特定平臺的軟件數據結構中的信息會被封裝到一個OpenGL上下文(context)中。OpenGL是一個狀態機器,這意味着在一個程序中設置了一個配置值後,這個值會一直保持,直到程序修改了這個值。切換上下文每每會產生較大的開銷,可是不一樣的繪製模塊,可能須要使用徹底獨立的狀態管理。所以,能夠在應用程序中分別建立多個不一樣的上下⽂,在不一樣線程中使用不一樣的上下文,上下文之間共享紋理、緩衝區等資源。這樣的方案,會⽐反覆切換上下文,或者大量修改渲染狀態,更加合理高效的。網絡
OpenGL狀態機數據結構
頂點(空間中的一個位置):在2D和3D中,當咱們繪製一個物體時,其實是用一些更小的稱爲圖元(Primitives)的形狀來組成這個物體。圖元是一維或者二維的實體或表面,如點、直線和多邊形(平面多邊的形狀)。在3D空間中,咱們把圖元組合在一塊兒建立3D物體。例如一個三維立方體是由6個正方形組成,每一個正方形表明一個獨立的面。正方形(其餘任何圖元)的每一個角稱爲頂點(Vertex)。這些頂點就在3D空間中指定了一個特定的座標。頂點其實就是2D或3D空間中的一個座標。架構
頂點數組:一個頂點(vertex)就是一個座標空間的點。頂點數組就是存儲這一個圖形的全部頂點數據的一段緩存。框架
管線:異步
固定管線/存儲着色器
着色器程序shader
頂點着色器VertexShader
片元着色器程序FragmentShader
GLSL(OpenGL Shadding Language):OpenGL着色器使用一種叫作OpenGL着色語言(OpenGL Shading Language)的語言進行編寫,或者叫作GLSL。這個語言的編譯器內置在OpenGl中。
光柵化Rasterization:實際繪製或填充每一個頂點之間的像素造成線段就叫作光柵化。
紋理:一個用來保存圖像的顏色元素值的 OpenGL ES 緩存。
混合Blending:像素的顏色將會和幀緩衝區中顏色附着上的顏色進行混合,混合的算法能夠經過0penGL的函數進 行指定。
變幻矩陣:計算圖形發生變化的矩陣。
投影矩陣:用於將3D座標轉換爲2D座標,並在2D下繪製。
渲染上屏/交換緩衝區:
在一個簡單的平面計算機屏幕上繪製點和線時,咱們根據行和列指定位置。
在OpenGL或幾乎全部的3D PAI中建立一個用於繪製的窗口時,必須指定但願使用的座標系統以及指定的座標如何映射到實際的屏幕像素。
在二維繪圖中,最經常使用的是笛卡爾座標系統。笛卡爾座標由一個x座標和y座標構成。x座標測量水平方向的位置,y座標測量垂直方向的位置。x軸和y軸垂直相交定義了一個平面。
2D笛卡爾座標新增一個表示深度份量的z軸就是3D笛卡爾座標。
視口就是窗口內部用於繪製裁剪區域的客戶區域。視口簡單的把裁剪區域映射到窗口中的一個區域。一般,視口被定義爲整個窗口,但這並不是嚴格必須的。
有時咱們只想在窗口的一部分部分進行繪圖。咱們可使用視口來縮小和放大窗口中的圖像,也能夠經過把視口設置大於窗口的用戶區域,從而只顯示裁剪區域的一部分。
首先須要理解投影:把3D幾何圖形的座標數據投影在一個2D的平面。就像用筆在玻璃上描摹出玻璃後面的物體的外形。而平面上的投影就是視景體。經過指定投影,咱們能夠指定在窗口中顯示的視景體。
正投影又叫平行投影。使用這種投影時,須要指定一個正方形或長方形的視景體。視景體以外的任何物體都不會被繪製。並且,全部實際大小相同的物體在屏幕上都具備相同的大小,無論它們是遠是近。
咱們還能夠在正投影中經過指定遠、近、左、右、頂和底裁剪平面來指定視景體。在這個視景體中出現的物體和圖形將被投影( 考慮它們的方向)到一個在屏幕上出現的2D圖像。
在透視投影中,遠處的物體看上去比近處的物體更小一些。它的視景體看上去有點像一個頂部被削平的金字塔。剩下來的這個形狀稱爲平截頭體( Frustum)。靠近視景體前面的物體看上去比較接近它們的原始大小。可是,當靠近視景體後部的物體被投影到視景體的前部時,它們看上去就顯得比較小。在模擬和3D動畫中,這 種投影可以得到最大程度的逼真感。