探cocos2dx特效实现(effects),源码版本(2.2.3)
2014-08-28 13:27
896 查看
cocos2dx实现的特效非常多,粗略算了下差不多有22种,如果需要查看具体表现效果的话可以运行TestCpp的effects test。
cocos2dx特效渲染使用opengl的fbo技术。fbo全称frame buffer object,如vbo一样,是opengl的一种优化渲染技术,用于提高渲染性能,不同于vbo用于顶点属性,当启用fbo之后的渲染命令会作用于纹理、RBO中,只有撤销fbo之后才会渲染到帧缓存内,也就是说fbo相当于一个调整渲染目标的技术。当fbo渲染到纹理、RBO之后,可以直接使用那些对象(作用于纹理时可以直接使用渲染到的纹理,RBO对象可以通过glReadBuffer、glBlitFramebuffer进行拷贝)。当然这需要连接到可渲染的对象上才行,单独的fbo无法
产生作用。其应用场景大多是需要获得已经渲染了的内容,比如说显示镜子上影像。以前的做法是先渲染到缓存,然后读到内存中,形成一个纹理。这样镜子里的影像就可以当成一个纹理贴到镜子上。现在使用fbo之后省掉了这一系列麻烦的操作,直接渲染到纹理,再然后贴到镜子上。
cocos2dx里边实现特效的方式也使用了类似于实现镜子影像的原理,可以看到在ccnode的visit()渲染函数里边会优先判断是否启用了特效格子,如果启用了特效格子那么挂接到fbo(beforeDraw()),然后才开始渲染ccnode以及它的子节点,最后在afterDraw()才会绘制到帧缓存中。
模块相关类:
CCGrabber:
封装fbo使用的细节。
CCGridBase:
封装设置特效格子一系列基础参数的方法,包含有beforeDraw,afterDraw。
CCGrid3D:
封装实际渲染方法,跟随时间变动调整格子坐标的方法。
CCTiledGrid3d:
类似于CCGrid3D。
uml图:
使用方式:
CCNode *tempNode = CCNode::Create();
CCWave3D *tempAction = CCWave3D::Create(2.5f,CCSize(15,12),rand()%10,rand()%60);
tempNode->runAction(tempAction);
tempNode->addChild(CCSprite::Create("randomPirture.png"))
addChild(tempNode);
扩展:
模块相关类已经说明了具体类封装的功能,针对这些功能使用继承的方式添加修改就可以了。
cocos2dx特效渲染使用opengl的fbo技术。fbo全称frame buffer object,如vbo一样,是opengl的一种优化渲染技术,用于提高渲染性能,不同于vbo用于顶点属性,当启用fbo之后的渲染命令会作用于纹理、RBO中,只有撤销fbo之后才会渲染到帧缓存内,也就是说fbo相当于一个调整渲染目标的技术。当fbo渲染到纹理、RBO之后,可以直接使用那些对象(作用于纹理时可以直接使用渲染到的纹理,RBO对象可以通过glReadBuffer、glBlitFramebuffer进行拷贝)。当然这需要连接到可渲染的对象上才行,单独的fbo无法
产生作用。其应用场景大多是需要获得已经渲染了的内容,比如说显示镜子上影像。以前的做法是先渲染到缓存,然后读到内存中,形成一个纹理。这样镜子里的影像就可以当成一个纹理贴到镜子上。现在使用fbo之后省掉了这一系列麻烦的操作,直接渲染到纹理,再然后贴到镜子上。
cocos2dx里边实现特效的方式也使用了类似于实现镜子影像的原理,可以看到在ccnode的visit()渲染函数里边会优先判断是否启用了特效格子,如果启用了特效格子那么挂接到fbo(beforeDraw()),然后才开始渲染ccnode以及它的子节点,最后在afterDraw()才会绘制到帧缓存中。
模块相关类:
CCGrabber:
封装fbo使用的细节。
CCGridBase:
封装设置特效格子一系列基础参数的方法,包含有beforeDraw,afterDraw。
CCGrid3D:
封装实际渲染方法,跟随时间变动调整格子坐标的方法。
CCTiledGrid3d:
类似于CCGrid3D。
uml图:
使用方式:
CCNode *tempNode = CCNode::Create();
CCWave3D *tempAction = CCWave3D::Create(2.5f,CCSize(15,12),rand()%10,rand()%60);
tempNode->runAction(tempAction);
tempNode->addChild(CCSprite::Create("randomPirture.png"))
addChild(tempNode);
扩展:
模块相关类已经说明了具体类封装的功能,针对这些功能使用继承的方式添加修改就可以了。
相关文章推荐
- 探cocos2dx裁剪结点、拖尾效果、进度效果、渲染纹理实现(misc_nodes),源码版本(2.2.3)
- 探cocos2dx文本显示实现(label_nodes),源码版本(2.2.3)
- 探cocos2dx对游戏精灵(sprite_nodes)的实现。(源码版本2.2.3)
- 探cocos2dx粒子特效模块(particle_nodes),源码版本(2.2.3)
- 探cocos2dx UI引擎(粗略阅读)(源码版本2.2.3)
- 探cocos2dx纹理模块(textures),源码版本(2.2.3)
- 探cocos2dx各类输入touch、keypad、IME,源码版本(2.2.3)
- cocos2dx启动流程分析(源码版本:cocos2d-x-2.2.3)
- 最近开发遇到的cocos2dx问题集(版本2.2.3,studio版本1.6.0.0)
- 版本自动更新程序及3种实现策略程序下载(附源码)
- iOS cocos2d实现自定义button(按钮特效)控件效果源码
- 酷炫开源项目cardsui-for-android-超详细源码分析,详解所用特效是如何实现的
- iOS cocos2d实现自定义button(按钮特效)控件效果源码
- cocos2dx3.2版本利用shader实现sprite灰态图的正确方法
- java实现多种幻灯片切换特效(经典,附源码)
- quick-cocos2d-x 2.2.3 rc版本中 crypto.md5file() 的C++实现在ANDROID上有BUG
- 基于Quick-cocos2dx 2.2.3 的动态更新实现(不需修改任何框架上的)
- IOS游戏源码下载之简易版雷电(2.2.3版本)源码完整下载和简单开发教程
- Mysql Innodb中undo-log和MVCC多版本一致性读的实现(源码分析)
- Winform分页控件重大更新,并实现普通版、DotNetBar、DevExpress三大版本整合更新(附各种例子源码)