cocos2dx3.X shader使图片置灰

cocos2dx3.X shader使图片置灰,第1张

概述1 OpenGL ES着色器 opengl es的着色器有.fsh和.vsh两个文件。这两个文件在被编译和链接后就可以产生可执行程序与GPU交互。attribute是从外部传进来的,每一个顶点都会有这两个属性,所以它也叫做vertex attribute(顶点属性)。而varying类型的变量是在vertex shader和fragment shader之间传递数据用的。 .vsh 是 verte 1OpenGLES着色器

opengles的着色器有.fsh.vsh两个文件。这两个文件在被编译和链接后就可以产生可执行程序与GPU交互。attribute是从外部传进来的,每一个顶点都会有这两个属性,所以它也叫做vertexattribute(顶点属性)。而varying类型的变量是在vertexshaderfragmentshader之间传递数据用的。

.vshvertexshader,用与顶点计算,可以理解控制顶点的位置,在这个文件中我们通常会传入当前顶点的位置,和纹理的坐标。新建gray.vsh文件。

attribute vec4 a_position;attribute vec2 a_texCoord;attribute vec4 a_color;					varying vec4 v_fragmentcolor;varying vec2 v_texCoord;								voID main()	{							    gl_position = CC_PMatrix * a_position;	v_fragmentcolor = a_color;	v_texCoord = a_texCoord;}

gray.fsh是片段shader。在这里面我可以对于每一个像素点进行重新计算。

varying vec4 v_fragmentcolor;	varying vec2 v_texCoord;			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));	gl_Fragcolor = vec4(gray,gray,v_orcolor.a);}		

两个文件放在resource文件夹下。


2使图片置灰
voID HelloWorld::sprAddGray(Sprite * sprite){	if (sprite)	{		GLProgram * p = new GLProgram();		p->initWithfilenames("gray.vsh","gray.fsh");		p->bindAttribLocation(GLProgram::ATTRIBUTE_name_position,GLProgram::VERTEX_ATTRIB_position);		p->bindAttribLocation(GLProgram::ATTRIBUTE_name_color,GLProgram::VERTEX_ATTRIB_color);		p->bindAttribLocation(GLProgram::ATTRIBUTE_name_TEX_COORD,GLProgram::VERTEX_ATTRIB_TEX_COORDS);		p->link();		p->updateUniforms();		sprite->setShaderProgram(p);	}}

3使图片还原
voID HelloWorld::sprRemoveGray(CCSprite * sprite){	if (sprite !=NulL)	{		std::string str = "ShaderpositionTexturecolor_noMVP";		CCGLProgram * pProgram = CCshadercache::sharedshadercache()->programForKey(str);		sprite ->setShaderProgram(pProgram);		CHECK_GL_ERROR_DEBUG();	} }

4运行效果

程序中响应按钮代码如下,形成灰色与彩色图交替显示。

voID HelloWorld::onBtncolorChange(Ref* MyRef){	static int IDx = 0;	if (IDx % 2 == 0)	{		sprAddGray(m_spr);	}	else	{		sprRemoveGray(m_spr);	}	IDx++;}


总结

以上是内存溢出为你收集整理的cocos2dx3.X shader使图片置灰全部内容,希望文章能够帮你解决cocos2dx3.X shader使图片置灰所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存