探cocos2dx特效实现(effects),源码版本(2.2.3)
来源:互联网 发布:mac电脑忘记管理员密码 编辑:程序博客网 时间:2024/06/05 20:54
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);
扩展:
模块相关类已经说明了具体类封装的功能,针对这些功能使用继承的方式添加修改就可以了。
0 0
- 探cocos2dx特效实现(effects),源码版本(2.2.3)
- 探cocos2dx粒子特效模块(particle_nodes),源码版本(2.2.3)
- 探cocos2dx文本显示实现(label_nodes),源码版本(2.2.3)
- 探cocos2dx纹理模块(textures),源码版本(2.2.3)
- 探cocos2dx裁剪结点、拖尾效果、进度效果、渲染纹理实现(misc_nodes),源码版本(2.2.3)
- 探cocos2dx对游戏精灵(sprite_nodes)的实现。(源码版本2.2.3)
- 探cocos2dx UI引擎(粗略阅读)(源码版本2.2.3)
- 探cocos2dx各类输入touch、keypad、IME,源码版本(2.2.3)
- cocos2dx 特效 3D特效
- cocos2dx启动流程分析(源码版本:cocos2d-x-2.2.3)
- Effects特效包之实现太阳耀斑及灯光耀斑特效
- cocos2dx学习笔记(cocos2dx特效)
- cocos2dx学习笔记(cocos2dx特效)
- cocos2dx源码:popup实现
- cocos2dx 特效
- cocos2dx特效
- cocos2dx 特效
- cocos2dx遇到的问题 2.2.3版本
- malloc,free在二级指针(指针的指针)的应用
- Android蓝牙Settings之界面
- OpenCV基础篇之像素操作对比度调节
- 学习NoSQL
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
- 探cocos2dx特效实现(effects),源码版本(2.2.3)
- 【OC学习-4】OC里面的类怎么声明的?也就是整一个类出来
- SWOT 分析方法
- IOS中AdMob广告点击后方向旋转
- PCB设计资料:看到最后才知道是福利
- 据说有99%的人都会做错的面试题
- LabVIEW上位机与串口通信
- 输入框 js正则判断输入
- 坚持每天写一个程序