--1.置灰方法
function fw.graySprite(sprite,isGray)
if isGray==nil or isGray then
if not GrayProgram then
fw.log("ai ya wo qu")
local program = cc.GLProgram:create("gray.vsh", "gray.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
GrayProgram = program
end
sprite:setGLProgram(GrayProgram)
else
if not PtcProgram then
local program = cc.GLProgram:create("ptc.vsh", "ptc.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
PtcProgram = program
end
sprite:setGLProgram(PtcProgram)
end
end
--2.新建gray.sh文件,并添加代码:
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
attribute float a_path;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec4 v_position;
varying float v_path;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_position = gl_Position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
v_path = a_path;
}
--3.新建gray.sh文件,并添加代码:
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec4 v_position;
varying float v_path;
//uniform sampler2D CC_Texture0;
void main()
{
vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));
float colorg = dot(v_orColor.rgb, vec3(v_fragmentColor.r, v_fragmentColor.g, v_fragmentColor.b));
// gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
if (v_position.x < -350.0 && v_position.y < -200.0)
{
gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
// gl_FragColor = vec4(v_orColor.r, v_orColor.g, v_orColor.b, v_orColor.a);
}
else
{
// gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
gl_FragColor = vec4(v_orColor.r, v_orColor.g, v_orColor.b, v_orColor.a);
}
}
--4.使用:
local sprite = cc.Sprite:create("other/ditu/road_01_kaitong.png")
sprite:setPosition(600, 300)
self:addChild(sprite)
fw.graySprite(sprite)
--5.说明: