在Cocos2d-x 3.0中使用opengl shader

在Cocos2d-x 3.0中使用opengl shader,第1张

概述        之前一直在TestCpp中看到shader可以把图片变成灰色的,也没有自己手动写过,最近在网上找了些博客或者论坛了解了一些。 现在这个里面使图片变成灰色的,毕竟我也是对OpenGL了解的不是很多,只是在这边介绍他的一些实用方法。 具体代码: bool GLSprite::init(){ auto spriteTest = Sprite::create("wall.png");

之前一直在TestCpp中看到shader可以把图片变成灰色的,也没有自己手动写过,最近在网上找了些博客或者论坛了解了一些。

现在这个里面使图片变成灰色的,毕竟我也是对OpenGL了解的不是很多,只是在这边介绍他的一些实用方法。

具体代码:

bool GLSprite::init(){	auto spriteTest = Sprite::create("wall.png");	spriteTest->setposition(Point(400,240));	this->addChild(spriteTest,-1);	auto spritenor = Sprite::create("Tag.png");	spritenor->setposition(Point(300,240));	this->addChild(spritenor,2);	auto spriteGray = Sprite::create("Tag.png");	spriteGray->setposition(Point(500,240));	spriteGray->setTag(102);	this->addChild(spriteGray,2);	graySprite(spriteGray);	auto spriteClose = Sprite::create("Closenormal.png");	auto spriteCloseSelect = Sprite::create("Closenormal.png");	spriteCloseSelect->setScale(1.2f);	spriteCloseSelect->setposition(Point( spriteClose->getBoundingBox().size.wIDth / 2 - spriteCloseSelect->getBoundingBox().size.wIDth / 2,spriteClose->getBoundingBox().size.height / 2 - spriteCloseSelect->getBoundingBox().size.height / 2));	auto itemClose = MenuItemSprite::create(spriteClose,spriteCloseSelect,CC_CALLBACK_1(GLSprite::close,this));	itemClose->setposition(Point(780,460));	Menu* pMenu = Menu::create(itemClose,NulL);	pMenu->setposition(Point::ANCHOR_BottOM_left);	this->addChild(pMenu,2);//	spriteGray->setGLProgramState(GLProgramState::getorCreateWithGLProgramname(GLProgram::SHADER_name_position_TEXTURE_color_NO_MVP));		return true;}voID GLSprite::graySprite(Sprite* sprite){	if(sprite)  	{  		GLProgram * p = new GLProgram();  		p->initWithfilenames("Shader/gray.vsh","Shader/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);  	} }voID GLSprite::close(Ref* pSender){	auto sprite = (Sprite*)this->getChildByTag(102);	sprite->setShaderProgram(shadercache::getInstance()->getProgram(GLProgram::SHADER_name_position_TEXTURE_color_NO_MVP));}


里面使用了两张相同的图片作为对比效果如图:

之前在写的过程中想到如果想把图片的颜色改变回来怎么办呢?

代码中的Close()方法中有实现了。

在资源文件中同样需要使用到的是 .vsh 和 .fsh 文件。具体在下面的代码中贴出来,就不需要在跑到其他位置下载了。

gray.fsh文件

varying vec4 v_fragmentcolor;	varying vec2 v_texCoord;	uniform sampler2D CC_Texture0;	// gray.fshvoID 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);}				

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;}
总结

以上是内存溢出为你收集整理的在Cocos2d-x 3.0中使用opengl shader全部内容,希望文章能够帮你解决在Cocos2d-x 3.0中使用opengl shader所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1052074.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存