Cocos2d lua 初識shader之一 置灰

2021-09-10 04:40:32 字數 1560 閱讀 4726

shader譯名為著色器,通俗來說,shader告訴電腦如何使用一種特殊的方式繪製物體。shader分為三種:頂點著色器、片段著色器、幾何著色器。

頂點shader:3d圖形都是由乙個乙個三角形組 成的,頂點shader就是計算頂點位置,並為後期畫素渲染做準備的

片段shader:是以畫素為單位,計算光 照、顏色的一系列演算法。

主要的圖形軟體庫:directx和opengl都提供了api介面使shader可以對gpu進行程式設計,cocos中封裝了對opengl的呼叫介面。

opengl中頂點shader被稱為vertex  shader,畫素shader則稱為fragment shader。

原理:將當前畫素點顏色點乘乙個值,已達到變暗的目的
-- 頂點shader

local vertex = [[

attribute vec4 a_position;

attribute vec2 a_texcoord;

attribute vec4 a_color;

#ifdef gl_es

varying lowp vec4 v_fragmentcolor;

varying mediump vec2 v_texcoord;

#else

varying vec4 v_fragmentcolor;

varying vec2 v_texcoord;

#endif

void main()

]]-- 片段shader

local fragment= [[

#ifdef gl_es

precision mediump float; // shader預設精度為double,opengl為了提公升渲染效率將精度設為float

#endif

// varying變數為頂點shader經過光柵化階段的線性插值後傳給片段著色器

varying vec4 v_fragmentcolor; // 顏色

varying vec2 v_texcoord; // 座標

void main(void)

]]local pprogram = cc.glprogram:createwithbytearrays(vertex , fragment)

-- img為sprite

十分簡單,在frag shader的main函式中**修改為下行,即原樣顯示。

gl_fragcolor = texture2d(cc_texture0, v_texcoord);

Cocos2d lua 初識shader之三 模糊

原理 遍歷當前畫素點周圍的部分畫素點,累加它們的rgba,根據距離設定權重並相乘,最後再根據總權重獲取該總和的平均值,將該平均值設定為當前畫素點的顏色。local vert attribute vec4 a position attribute vec2 a texcoord attribute v...

Cocos2d lua 初識shader之四 描邊

原理 對於所有透明的畫素點,遍歷該畫素點周圍的所有畫素點,當有任意乙個畫素點非透明時,就將該畫素點置為描邊顏色。ps.在網上讀到一位前輩寫的方法是 遍歷所有不透明的畫素點四周,當有透明畫素點時,將該畫素點設定為描邊顏色 思路相反 這樣的做法會有些缺憾,結尾會放出比較圖。local vert attr...

Cocos2d lua 滑動選關效果

昨天看到前面的大佬在做這種效果,特意去請教了一下,剛開始以為是用pageview或者listview做的,原來是用最普通的觸控來實現的。感覺自己應該多思考多學習,不會的地方還是太多了,有些東西其實沒有自己想的那麼複雜,能用一些基本元素實現來實現的東西,自己有時候卻總是覺得是不是 不會 不懂,也可能是...