有小伙伴提出了这个问题,其实GLProgramCocos2d-x引擎自带了。完全可以直接拿来用。
先上图吧。使用opengl前后的对比:
1.在cpp中使用openGL shader。
(1)添加gray.vsh和gray.fsh到资源目录(见附件)。
(2)添加如下代码:
- boolHelloWorld::init()
- {
- if(!Layer::init())
- returnfalse;
- }
- izevisibleSize=Director::getInstance()->getVisibleSize();
- autosprite=Sprite::create("HelloWorld.png");
- sprite->setAnchorPoint(Point(0.5,0.5));
- sprite->setPosition(Point(visibleSize.width/3,visibleSize.height/3));
- this->addChild(sprite);
- graySprite(sprite);
- true;
-
- voidHelloWorld::graySprite(Sprite*sprite)
- {
- if(sprite)
- GLProgram*p=newGLProgram();
- 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);
- }
2.在js中使用opengl shader.
(1)添加gray.vsh和gray.fsh到资源目录。 (2)添加如下代码:
varHelloWorldLayer=cc.Layer.extend({
- sprite:null,
- ctor:function()
- this._super();
- varsize=cc.director.getWinSize();
- this.sprite=cc.Sprite.create(res.HelloWorld_png);
- this.sprite.attr({
- x:size.width/2,
- y:size.height/2,
- scale:0.5,248)"> rotation:180
- });
- this.addChild(this.sprite,0);
- graySprite(this.sprite);
- true;
- }
- });
- functiongraySprite(sprite)
- varshader=newcc.GLProgram();
- shader.retain();
-
- shader.initWithFilenames("res/gray.vsh","res/gray.fsh");
- shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION,cc.VERTEX_ATTRIB_POSITION);
- shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR,cc.VERTEX_ATTRIB_COLOR);
- shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD,cc.VERTEX_ATTRIB_TEX_COORDS);
- shader.link();
- shader.updateUniforms();
- sprite.setShaderProgram(shader);
- }
附件:gray.vsh和gray.fsh
翻译自:
1.
http://www.cocos2d-x.org/forums/6/topics/49035
2.
http://www.cocos2d-x.org/forums/19/topics/49038 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|