說說紋理常用的采樣方式?
最鄰近點采樣(GL_NEAREST)和雙線性采樣(GL_LINEAR)。
GL_NEAREST 采樣是 OpenGL 預設的紋理采樣方式 ,OpenGL 會選擇中心點最接近紋理座標的那個像素,紋理放大的時候會有鋸齒感或者顆粒感。
GL_LINEAR 采樣會基於紋理座標附近的紋理像素,計算出一個插值,近似出這些紋理像素之間的顏色。
一個紋理像素的中心距離紋理座標越近,那麽這個紋理像素的顏色對最終的樣本顏色的貢獻越大。因為與周圍的像素做加權平均了,紋理放大的時候會變模糊。
當進行放大(Magnify)和縮小(Minify)操作的時候可以設定紋理過濾的選項,比如你可以在紋理被縮小的時候使用鄰近過濾,被放大時使用線性過濾。
我們需要使用glTexParameter*函式為放大和縮小指定過濾方式。這段程式碼看起來會和紋理環繞方式的設定很相似:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
什麽是 EGL ?
EGL 是 OpenGL ES 和本地視窗系統(Native Window System)之間的通訊介面 ,它的主要作用:
與裝置的原生視窗系統通訊;
查詢繪圖表面的可用型別和配置;
建立繪圖表面;
在OpenGL ES 和其他圖形渲染API之間同步渲染;
管理紋理貼圖等渲染資源。
OpenGL ES 的平台無關性正是借助 EGL 實作的,EGL 遮蔽了不同平台的差異 。
本地視窗相關的 API 提供了存取本地視窗系統的介面,而 EGL 可以建立渲染表面 EGLSurface ,同時提供了圖形渲染上下文 EGLContext,用來進行狀態管理,接下來 OpenGL ES 就可以在這個渲染表面上繪制。
紋理有哪些環繞方式(Wrapping)?
環繞方式(Wrapping) | 描述 |
---|---|
GL_REPEAT | 對紋理的預設行為。重復紋理影像。 |
GL_MIRRORED_REPEAT | 和GL_REPEAT一樣,但每次重復圖片是映像放置的。 |
GL_CLAMP_TO_EDGE | 紋理座標會被約束在0到1之間,超出的部份會重復紋理座標的邊緣,產生一種邊緣被拉伸的效果。 |
GL_CLAMP_TO_BORDER | 超出的座標為使用者指定的邊緣顏色。 |
當紋理座標超出預設範圍時,每個選項都有不同的視覺效果輸出。我們來看看這些紋理影像的例子:
OpenGL ES 不支持 GL_CLAMP_TO_BORDER
設定方式:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
鋸齒問題怎麽最佳化?
主要有2種方式:
高斯模糊(或者線性模糊)
多重采樣
高斯模糊(或者線性模糊)主要作用是在鋸齒的邊緣加一些過渡,讓邊緣看起來更平滑。
多重采樣抗鋸齒是使用多個采樣點來決定一個片段的顏色,使邊緣的過渡更加平滑。
多重采樣抗鋸齒實作主要是透過構建一個多重采樣渲染緩沖區(多重采樣紋理)作為顏色附著的幀緩沖區,詳細實作方式參考:
-- END --
進技術交流群, 掃碼添加我的微信:Byte-Flow
獲取相關資料和源碼
學習音視訊、OpenGL ES、Vulkan 、Metal、影像濾鏡、視訊特效及相關渲染技術的付費社群,面試指導,1v1 簡歷服務,職業規劃。
我的付費社群
推薦: