原理:遍歷當前畫素點周圍的部分畫素點,累加它們的rgba,根據距離設定權重並相乘,最後再根據總權重獲取該總和的平均值,將該平均值設定為當前畫素點的顏色。
local vert = [[
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()
]]local frag = [[
#ifdef gl_es
precision mediump float;
#endif
varying vec4 v_fragmentcolor;
varying vec2 v_texcoord;
uniform float limit; // 半徑
uniform vec2 my_size; // 紋理大小(寬和高),為了計算周圍各點的紋理座標,必須傳入它,因為紋理座標範圍是0~1
void main(void)
}// 設定當前畫素點的顏色為總顏色之和除以總權重
gl_fragcolor = all / totalweight;}]]
-- 1.建立glprogram
local glprogram = cc.glprogram:createwithbytearrays(vert, frag)
-- 2.獲取glprogramstate
local glprogramstate = cc.glprogramstate:getorcreatewithglprogram(glprogram)
-- 3.設定屬性值
glprogramstate:setuniformfloat("limit", 10)
-- 4.獲取材質的尺寸。self.blur為sprite
local size = self.blur:gettexture():getcontentsizeinpixels()
glprogramstate:setuniformvec2("my_size", cc.p(size.width, size.height))
self.blur:setglprogram(glprogram)
self.blur:setglprogramstate(glprogramstate)
半徑小:
半徑大:
Cocos2d lua 初識shader之一 置灰
shader譯名為著色器,通俗來說,shader告訴電腦如何使用一種特殊的方式繪製物體。shader分為三種 頂點著色器 片段著色器 幾何著色器。頂點shader 3d圖形都是由乙個乙個三角形組 成的,頂點shader就是計算頂點位置,並為後期畫素渲染做準備的 片段shader 是以畫素為單位,計算...
Cocos2d lua 初識shader之四 描邊
原理 對於所有透明的畫素點,遍歷該畫素點周圍的所有畫素點,當有任意乙個畫素點非透明時,就將該畫素點置為描邊顏色。ps.在網上讀到一位前輩寫的方法是 遍歷所有不透明的畫素點四周,當有透明畫素點時,將該畫素點設定為描邊顏色 思路相反 這樣的做法會有些缺憾,結尾會放出比較圖。local vert attr...
Cocos2d lua 滑動選關效果
昨天看到前面的大佬在做這種效果,特意去請教了一下,剛開始以為是用pageview或者listview做的,原來是用最普通的觸控來實現的。感覺自己應該多思考多學習,不會的地方還是太多了,有些東西其實沒有自己想的那麼複雜,能用一些基本元素實現來實現的東西,自己有時候卻總是覺得是不是 不會 不懂,也可能是...