? ? ? ? ?變灰shader很簡單,就是改變了一下rgb的值悦析。0.2126眶拉,0.7152阔逼,0.0722這幾個系數(shù)是根據(jù)人眼對rgb這三種基本顏色識別的強弱算出來的。
頂點著色器 Grayscale.vert
//頂點著色器
attribute vec4 a_position; ? //頂點坐標
attribute vec2 a_texCoord;? //紋理坐標
attribute vec4 a_color;? ? ? ? //頂點顏色
//varying 頂點shader和片段shader之間相互傳遞的參數(shù)烛谊。
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
? ? ? ? gl_Position = CC_PMatrix * a_position;
? ? ? ? v_fragmentColor = a_color;
? ? ? ? v_texCoord = a_texCoord;
}
片段著色器Grayscale.frag
//片段著色器
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main(void)
{
? ? ? ? ?vec4 c = texture2D(CC_Texture0, v_texCoord);
? ? ? ? ? //變灰就是改變了一下rgb的值风响。
? ? ? ? ? //0.2126,0.7152丹禀,0.0722這幾個系數(shù)據(jù)說是根據(jù)人眼對rgb這三種基本顏色識別的強弱算出來的状勤。
? ? ? ? ? gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b);
? ? ? ? ?gl_FragColor.w = c.w;
}
使用示例
//精靈
auto splash = Sprite::create("HelloWorld.png");
splash->setPosition(100, 100);
this->addChild(splash, 1);
//vert:頂點著色器 ?frag:片段著色器
auto glprogram = GLProgram::createWithFilenames("Grayscale.vert", "Grayscale.frag");
auto glprogramstate = GLProgramState::getOrCreateWithGLProgram(glprogram);
splash->setGLProgramState(glprogramstate);
效果