優(yōu)秀博客
https://mubu.com/doc/CJSil5TLHm
疑難問題:
https://docs.qq.com/sheet/DVHd1WWNrUXpVekJJ?tab=BB08J2
OpenGL 名詞:
Context上下文:狀態(tài)機(jī)(機(jī)器)。OpenGL指令基礎(chǔ)、記錄功能是否打開。不同線程可創(chuàng)建不同上下文,共享紋理、緩沖區(qū)等資源。
渲染: 圖片/按鈕/視頻 -> 繪制到屏幕的過程 解碼圖片->渲染到屏幕。
頂點數(shù)組: OpenGL沒有正方形,存儲到內(nèi)存之中成為頂點數(shù)組。只支持點、線、三角形,正方形是由兩個三角形組合成的,所以正方形有六個頂點。頂點數(shù)據(jù)存到內(nèi)存中,GPU調(diào)度存在《帶寬》問題。
頂點緩存區(qū): 如果要GPU快速調(diào)度頂點數(shù)據(jù),頂點數(shù)據(jù)存儲到GPU的顯存中。
內(nèi)存 CPU 有一級二級三級緩存 ,GPU顯存!
(顯示前提將png圖片解壓成位圖!png、jpg都是壓縮圖片)
位圖: 120120 = 14400(像素點) ->RGBA存儲->144004(字節(jié))->位圖(紋理)。
映射: 對應(yīng)關(guān)系。
管線: 流水線 :肥皂水 - 模具 - 肥皂塊。
固定管線: 對應(yīng)非常多模具(固定著色器),形成結(jié)果。肥皂水 - 模具( 對應(yīng)模具/固定著色器) - 肥皂塊。
可編程管線: 修改系統(tǒng)api。肥皂水 - 模具(自定義變成模具GLSL語法驅(qū)使GPU) - 肥皂塊。
著色器: 函數(shù)/方法供CPU使用,著色器shader(代碼塊)供GPU使用。著色器就是方法
固定著色器: 也稱存儲著色器,蘋果API,只能調(diào)用,由OpenGL提供。
自定義著色器: 可以進(jìn)行自定義(自己基于GLSL語法編寫代碼段)
頂點著色器: 用來處理頂點相關(guān)的代碼,1、確定位置。2、縮放、偏移、旋轉(zhuǎn)。3、手機(jī)屏幕為2D,顯示3D,3D->2D經(jīng)過投影換算。
片元/像素 著色器: 片元(像素點),處理一個一個像素點,120*120 要處理14400次,GPU并行運算。(如果是CPU則麻煩)
片元著色器拓展:圖片飽和度調(diào)整,需要片元著色器懟像素點一個一個修改。
其他的著色器(幾何、曲面細(xì)分)自定義不了
能自定義的著色器僅有兩個:頂點著色器、片元著色器。
GSLS: GPU只認(rèn)GLSL語言/shading language(OpenGL標(biāo)準(zhǔn))
光柵化: 頂點數(shù)據(jù)轉(zhuǎn)化為片元數(shù)據(jù)。兩個過程(不可編程)圖源裝配 1、確定圖形在像素的范圍;2、顏色附著。
頂點著色器處理頂點、片元著色器處理像素。
紋理: 多數(shù)指圖片,壓縮圖片(.png)轉(zhuǎn)化為位圖 .tga,在OpenGL移動端中png轉(zhuǎn)位圖。
混合: Layer。 2個圖層 粉紅色0.5、 藍(lán)色0.2,疊加通過混合計算,組透明度會觸發(fā)離屏渲染。
變換矩陣: 評議、旋轉(zhuǎn)、縮放(《線性代數(shù)》、《3D數(shù)學(xué)》)
投影矩陣: 3D圖形轉(zhuǎn)換為二維坐標(biāo)
渲染上屏/交換緩沖區(qū):
2D笛卡爾坐標(biāo): x、y
3D笛卡爾坐標(biāo)系: x、y、z
視口: 坐標(biāo)系對應(yīng)屏幕區(qū)域的范圍,可設(shè)置 代碼:glViewport
投影方式: 有且只有兩種 1、正(平行)投影,無論遠(yuǎn)近1:1投影;2、透視投影,遠(yuǎn)小近大
攝像機(jī)坐標(biāo)系: 觀察點坐標(biāo)系
物體坐標(biāo)系: 物體本身坐標(biāo)
最終得到規(guī)范坐標(biāo)系!
頂點數(shù)據(jù)->頂點著色器->細(xì)分著色器->幾何著色器->圖元設(shè)置->剪切->光柵化->片元著色器->效果
OpenGL:面向過程
GLSL語法
GLKit框架
OpenGL渲染流程
Metal:略