Cocos2d.docx
- 文档编号:9385142
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:8
- 大小:16.87KB
Cocos2d.docx
《Cocos2d.docx》由会员分享,可在线阅读,更多相关《Cocos2d.docx(8页珍藏版)》请在冰豆网上搜索。
Cocos2d
Cocos2d
[Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:
红孩儿Cocos2d-X学习园地QQ群:
249941957
红孩儿Cocos2d-X学习园地QQ2群:
44208467
Cocos2d-x2.0渲染到纹理深入分析
另:
本章所用Cocos2d-x版本为:
cocos2d-2.0-x-2.0.2@
Aug302012
http:
//cn.cocos2d-x.org/download
前几天被邀请到车库咖啡参加了国内Cocos2d-x网上知名讲师的一个小聚会。
心里是倍儿感荣幸,回来后越发喜爱Cocos2d-x了,越发喜爱写博客了,不过看着越来越庞大的Cocos2d-x工程和越来越少的时间表,心里也越来越着急了,除了写博客,还有工具箱也需要完善,没办法,只有多熬夜了。
PS:
刚刚上传了几个新的工具箱的视频到微博,是制做关键帧动画,导出PLIST并在Cocos2d-x中加载播放。
好,继续今天开学。
在游戏引擎开发中,常常会遇到RenderToTexture,简称RTT,即“渲染到纹理”技术。
此项技术有什么用呢?
当然有用,比如你要开发一个游戏人物的实时的3D头像,可以放一个摄像机在人物头部的相应位置,并创建一个RenderTexture或RenderTarget,之后将摄相机看到的画面输出到这个RenderTexture或RenderTarget中。
然后使用它绘制到一个UI界面中,就可以实时的看到人物头部的动画,表情了。
在Cocos2d-x中,RenderTexture则多用来做一些特殊效果,比如在之前讲网格动画一章时,令人赞叹的各种场景画面切割效果,如果没有RTT的支持是无法做到的,将场景画面先RTT到一张纹理上,然后在网格上贴上纹理,网格顶点做各种运动就实现了场景画面被切割的效果。
现在我们将重新认识一下RenderTexture。
在TestCpp中它做为独立的演示场景存在,名称为RenderTextureTest。
我们先来看一下最重要的类CCRenderTexture。
它是用于管理渲染目标纹理的类,与纹理不同的是,它必须是属于
打开CCRenderTexture.h:
//图像格式枚举,可以保存为JPG和PNG两种格式
typedefenumeImageFormat
{
kCCImageFormatJPEG=0,
kCCImageFormatPNG=1,
}tCCImageFormat;
//由结点派生
classCC_DLLCCRenderTexture:
publicCCNode
{
//精灵成员变量及存取接口
CC_PROPERTY(CCSprite*,m_pSprite,Sprite)
public:
//构造
CCRenderTexture();
//析构
virtual~CCRenderTexture();
//创建一个渲染目标纹理。
参数指定大小,像素格式和深度模板缓冲格式。
内部调用create实现。
CC_DEPRECATED_ATTRIBUTEstaticCCRenderTexture*renderTextureWithWidthAndHeight(intw,inth,CCTexture2DPixelFormateFormat,GLuintuDepthStencilFormat);
//创建一个渲染目标纹理。
参数指定大小,像素格式。
内部调用create实现。
CC_DEPRECATED_ATTRIBUTEstaticCCRenderTexture*renderTextureWithWidthAndHeight(intw,inth,CCTexture2DPixelFormateFormat);
//创建一个渲染目标纹理。
参数指定大小.。
内部调用create实现。
CC_DEPRECATED_ATTRIBUTEstaticCCRenderTexture*renderTextureWithWidthAndHeight(intw,inth);
//第一个函数的create实现。
staticCCRenderTexture*create(intw,inth,CCTexture2DPixelFormateFormat,GLuintuDepthStencilFormat);
//第二个函数的create实现。
staticCCRenderTexture*create(intw,inth,CCTexture2DPixelFormateFormat);
//第三个函数的create实现。
staticCCRenderTexture*create(intw,inth);
//初始化,参数为大小和像素格式。
boolinitWithWidthAndHeight(intw,inth,CCTexture2DPixelFormateFormat);
//初始化,参数为大小和像素格式,深度模板缓冲格式。
boolinitWithWidthAndHeight(intw,inth,CCTexture2DPixelFormateFormat,GLuintuDepthStencilFormat);
//开始渲染到当前目标纹理。
voidbegin();
//清空颜色缓冲的值为指定值。
voidbeginWithClear(floatr,floatg,floatb,floata);
//清空颜色缓冲和深度的值为指定值。
voidbeginWithClear(floatr,floatg,floatb,floata,floatdepthValue);
//清空颜色缓冲和深度,模版值缓冲的值为指定值。
voidbeginWithClear(floatr,floatg,floatb,floata,floatdepthValue,intstencilValue);
//LUA中调用的结束函数。
inlinevoidendToLua(){end();};
//结束渲染到当前目标纹理。
voidend();
//清空目标纹理的颜色为指定色
voidclear(floatr,floatg,floatb,floata);
//清空目标纹理的深度值
voidclearDepth(floatdepthValue);
//清空目标纹理的模板缓冲值
voidclearStencil(intstencilValue);
//由目标纹理的数据产生出CCImage实例。
CCImage*newCCImage();
//保存目标纹理到相应图片文件。
boolsaveToFile(constchar*szFilePath);
//保存目标纹理到相应图片文件,指定图像格式。
boolsaveToFile(constchar*name,tCCImageFormatformat);
//监听消息,保存目标纹理。
voidlistenToBackground(CCObject*obj);
protected:
//FBO对象,即帧缓冲区,一帧中像素数据保存的缓冲区域。
可参看
GLuintm_uFBO;
//深度缓冲。
GLuintm_uDepthRenderBufffer;
//保存旧的FBO对象。
GLintm_nOldFBO;
//使用的纹理。
CCTexture2D*m_pTexture;
//用于保存当前纹理数据的可变纹理对象。
CCImage*m_pUITextureImage;
//像素格式
GLenumm_ePixelFormat;
};然后是CPP:
//构造
CCRenderTexture:
:
CCRenderTexture()
:
m_pSprite(NULL)
m_uFBO(0)
m_uDepthRenderBufffer(0)
m_nOldFBO(0)
m_pTexture(0)
m_pUITextureImage(NULL)
m_ePixelFormat(kCCTexture2DPixelFormat_RGBA8888)
{
//设置监听EVENT_COME_TO_BACKGROUND事件,如果响应调用CCRenderTexture:
:
listenToBackground函数。
CCNotificationCenter:
:
sharedNotificationCenter()->addObserver(this,
callfuncO_selector(CCRenderTexture:
:
listenToBackground),
EVENT_COME_TO_BACKGROUND,
NULL);
}
//析构
CCRenderTexture:
:
~CCRenderTexture()
{
//释放FBO
glDeleteFramebuffers(1,&m_uFBO);
//释放深度缓冲
if(m_uDepthRenderBufffer)
{
glDeleteRenderbuffers(1,&m_uDepthRenderBufffer);
}
//释放
CC_SAFE_DELETE(m_pUITextureImage);
//移除监听响应函数。
CCNotificationCenter:
:
sharedNotificationCenter()->removeObserver(this,EVENT_COME_TO_BACKGROUND);
}
//监听消息,保存目标纹理。
voidCCRenderTexture:
:
listenToBackground(cocos2d:
:
CCObject*obj)
{
//如果使用可变纹理。
#ifCC_ENABLE_CACHE_TEXTURE_DATA
//释放上一个m_pUITextureImage
CC_SAFE_DELETE(m_pUITextureImage);
//产生当前渲染目标的CCImage
m_pUITextureImage=newCCImage();
//如果成功则将纹理m_pTexture中数据填充到可变纹理。
if(m_pUITextureImage)
{
constCCSize&s=m_pTexture->getContentSizeInPixels();
VolatileTexture:
:
addDataTexture(m_pTexture,m_pUITextureImage->getData(),kTexture2DPixelFormat_RGBA8888,s);
}
else
{
CCLOG("Cacherendertexturefailed!
");
}
#endif
}
//取得精灵成员
CCSprite*CCRenderTexture:
:
getSprite()
{
returnm_pSprite;
}
//设置精灵成员。
voidCCRenderTexture:
:
setSprite(CCSprite*var)
{
m_pSprite=var;
}
//创建一个渲染目标纹理。
参数指定大小,像素格式。
内部调用create实现。
CCRenderTexture*CCRenderTexture:
:
renderTextureWithWidthAndHeight(intw,inth,CCTexture2DPixelFormateFormat)
{
returnCCRenderTexture:
:
create(w,h,eFormat);
}
//上面的create实现。
CCRenderTexture*CCRenderTexture:
:
create(intw,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cocos2d