cocos2dx 离屏渲染
来源:互联网 发布:三星网络电视32寸 编辑:程序博客网 时间:2024/05/21 13:53
今天才发现 cocos2dx 有一个类叫做 CCRenderTexture,封装了 opengl render to texture 的 细节。
这个类的是采用 FBO ,把图像渲染到 自己新建的 frame buffer 来实现的。
如果写一个 shader ,比如让图像变成灰色,如果只给一个 CCSprite setShaderProgram()的话,只能让单独的 Sprite 变成灰色,
但是如果想让整个游戏场景变成灰色,或者让其中一部分变成灰色,就需要使用 FBO 离屏渲染技术,把一些渲染的内容放到一个 FBO上,
然后绘制完成后,再放回到 最终的 frame buffer 中。
cocos2dx 封装了这些操作,具体用法是
1.实例化一个 CCRenderTexture* m_pRtt;
2.初始化时候,设置它的大小 m_pRtt = CCRenderTexture::create( width,height );
3.在 m_pRtt->begin() 和 m_pRtt->end() 之间,执行 opengl 绘制指令。
比如在当前场景的 update() 中,这样写:
m_pRtt->begin();
this->visit();
m_pRtt->end();
这样整个场景就绘制到了 m_pRtt 这个 RenderTexture 中
4. 如果需要给整个场景设置 shader ,则调用
m_pRtt->getSprite() ,给这个 Sprite setShaderProgram()即可。
这样,就可以实现 全屏高斯模糊 ,全屏变灰等 shader 的效果, 也可以用它实现屏幕截屏,保留上一帧图像等功能。
今天参考了这篇文章,才了解到 CCRenderTexture 的用法的
http://www.cocoachina.com/bbs/read.php?tid=237495
自己欠缺的是对 opengl FBO 真正的理解, 和对 shader 算法知识匮乏。
如果知识应用的话,利用这个方法,就可以在 cocos2dx 中写出一些漂亮的效果了。
按照自己上面说的做法,在 cocos2dx 3.0里面, 一旦给 render texture 增加自己写的 shader 后 ,出现了绘制不出来的情况。
暂时还不知道问题出在哪,初步感觉是自己写的 fragment shader 是存在错误的。。。但是还没查明错在哪里。
还是应该多去学习 opengl 底层知识才能解决这种 bug.
- cocos2dx 离屏渲染
- cocos2dX 文字的渲染
- cocos2dx渲染流程
- cocos2dx 文字渲染
- Cocos2Dx之渲染流程
- cocos2dx渲染流程
- Cocos2Dx之渲染流程
- Cocos2Dx之渲染流程
- cocos2dx的渲染树
- cocos2dx的渲染机制
- cocos2dx的渲染机制
- cocos2dx 启动渲染过程
- cocos2dx渲染机制
- cocos2dx 渲染任意形状贴图
- cocos2dx 渲染任意形状贴图
- cocos2dx 渲染任意形状贴图
- cocos2dx 渲染任意形状贴图
- 【转】Cocos2Dx之渲染流程
- 为啥要 sweet.js
- LeetCode(173) Binary Tree Iterator
- 使用命令行搜索你的java 库
- 关于 MySQL root 账号的默认密码
- 分享一些高质量的博客
- cocos2dx 离屏渲染
- 原地更新终端输出信息
- 虚拟现实眼镜(增强现实眼镜)成像原理浅析
- 基于HTML5的拓扑图编辑器 - Graph.Editor
- 如何利用推送提高App活跃度
- 转变Hibernate的使用方式
- 安卓开发日记(1) - 安装 Android 开发环境和 first app
- 实时通信云代码集成发布
- 实现多个空间内容本地文件夹与同步