Maison > base de données > tutoriel mysql > le corps du texte

cocos2dx 离屏渲染

WBOY
Libérer: 2016-06-07 15:32:39
original
1231 Les gens l'ont consulté

今天才发现 cocos2dx 有一个类叫做 CCRenderTexture,封装了 opengl render to texture 的 细节。 这个类的是采用 FBO ,把图像渲染到 自己新建的 frame buffer 来实现的。 如果写一个 shader ,比如让图像变成灰色,如果只给一个 CCSprite setShaderProgram()

今天才发现 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.


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal