OpenGL ES關於畫素渲染

2022-09-02 23:36:35 字數 1023 閱讀 2094

知道著色器的人都會知道乙個東西,那就是著色器分為頂點著色器與片元著色器。在移動端真正渲染到手機螢幕上的無非是一些顏色值,但是乙個片元是大於乙個畫素的,乙個片元可能包含多個畫素,當然乙個片元所包含的畫素的多少是與手機螢幕解析度有關係的。

那麼我們該怎麼操縱畫素,我想對我整個場景渲染出來的一些東西進行畫素操做。比如說,都知道在cpu端,如果你使用了msaa多重取樣抗鋸齒,那麼對於手機效能來說,是很拖累的。所以我想把這個多重取樣抗鋸齒的東西轉移到gpu端來,不在cpu端去堵塞渲染的主線程了,那麼這個時候就需要對這幅fbo紋理的畫素進行操作。一副是有自己的寬高的,其寬高說的是這幅的畫素多少,寬100,高100,那麼,這幅一共擁有100*100個畫素。我們知道了這副紋理的畫素大小了。我們在片元著色器,紋理取樣的座標為st,對應到紋理的畫素大小,我們對應過來,就是1/s,1/t,這就是每個畫素的大小,我們知道了畫素的大小,那麼就可以根據當前的取樣的紋理的座標值,計算出來其周圍八個畫素或者更多畫素的取樣值,我們取到這些取樣值後,進行一些演算法運算就可以了,比如說我可以進行多重取樣抗鋸齒。不懂msaa抗鋸齒原理的可以自己看看書。根據器原理,我們就可以做出來很多精細化的對畫素操作的特效渲染。

**(片元著色器):

float steps = 1/texwidth;

float stept = 1/texheight;

float currs = texcoords.s;

float currt = texcoords.t;

color0 = texture2d(texture, vec2(currs,currt));

color1 = texture2d(texture,vec2(currs + steps,currt + stept));//後面依次類推,可以計算出來當前畫素周邊的畫素。

取到了多個畫素後,就可以進行模糊,銳化,灰度,漸變,抗鋸齒等等這些關於紋理或者fbo紋理特效的開發了。也可以自己套進去乙個橢圓的公式,那麼後期渲染出來的就變成乙個有圓形軌跡的了,當然,如果加入opencv識別到人臉,那麼也可以對人臉進行變形,變大,變成啥都行,用matlab訓練出來一套演算法,這些都不在困難。

OpenGL ES渲染管線

渲染管線 graphics pipeline 在 opengl es 1.0 版本中,支援固定管線,而 opengl es 2.0 版本不再支援固定管線,只支援可程式設計管線。什麼是管線?什麼又是固定管線和可程式設計管線?管線 pipeline 也稱渲染管線,因為 opengl es在渲染處理過程中...

OpenGL ES 渲染管線

頂點著色器是乙個可程式設計的處理單元 執行頂點的變換 透視矩陣 光照 材質的應用等與計算等頂點的相關操作 每個頂點執行一次頂點著色器 opengl es的工作流程為首先將原始的頂點幾何資訊及其他屬性傳送到頂點著色器中 經過頂點著色器處理後產生頂點座標 顏色 位置等後續流程需要的各項定點屬性資訊 然後...

關於OpenGL ES版本

1.opengl es 各版本 opengl es 1.x 針對固定管線硬體 opengl es 2.x 針對可程式設計管線硬體 opengl es 1.0 以 opengl 1.3 規範為基礎 opengl es 1.1 以 opengl 1.5 規範為基礎 opengl es 2.0 以 ope...