模块包含4个功能,可以实现任意形状裁剪的CCClipingNode、具有拖尾效果的CCMotionStreak、具有2种进度展示效果的CCProgressTimer、能够渲染到纹理而不是帧缓存的CCRenderTexture。
具体效果请参考TestCpp:MotionStreakTest,ClippingNodeTest,ActionsProgressTest,RenderTextureTest。
相关类:
CCClipingNode:
cocos2dx是基于opengl的,而在opengl中,要实现任意形状的裁剪需要用到模板测试(stencil test,裁剪测试只能指定矩形裁剪)。模板测试其实也是跟深度测试一样,在深度测试中,也只会绘制通过测试的那一部分图形。模板测试实现任意形状裁剪的过程:先将第一幅图绘制到模板缓存中(并没有绘制到帧缓存,也就是看不见的),然后绘制被裁剪的图,如果绘制被裁剪图的过程中模板测试通过则绘制通过的那一部分,就这样实现了任意形状的裁剪。
CCMotionStreak:
当初看到拖尾效果的时候惊异不少,设想自己要实现这个效果的话确实实现不出来,但是在看过特效实现之后再来想它感觉也不是很难了。说白了,就是使用三角图形将纹理分割拉伸,当纹理映射到三角图形上的之后就会有那种拖尾的效果,为什么选择三角形呢?因为opengl es只支持三角形,再者也可以近似模拟各种表面,比如说曲面。
CCProgressTimer:
kCCProgressTimerTypeBar类型的进度效果就不说了,这很简单。kCCProgressTimerTypeRadial类型初看的时候感觉挺复杂,但是想通了之后也挺简单。通过判断中点、旋转过后的移动点与原始贴图四条边的相交点,就可以生成一个四边形,但是如果进度显示超过半圆之后就需要生成2个四边形。
CCRenderTexture:
使用opengl fbo技术,参考: fbo
uml图:
略
使用方式:
可以参考TestCpp:MotionStreakTest,ClippingNodeTest,ActionsProgressTest,RenderTextureTest的实例代码。
扩展:
略
具体效果请参考TestCpp:MotionStreakTest,ClippingNodeTest,ActionsProgressTest,RenderTextureTest。
相关类:
CCClipingNode:
cocos2dx是基于opengl的,而在opengl中,要实现任意形状的裁剪需要用到模板测试(stencil test,裁剪测试只能指定矩形裁剪)。模板测试其实也是跟深度测试一样,在深度测试中,也只会绘制通过测试的那一部分图形。模板测试实现任意形状裁剪的过程:先将第一幅图绘制到模板缓存中(并没有绘制到帧缓存,也就是看不见的),然后绘制被裁剪的图,如果绘制被裁剪图的过程中模板测试通过则绘制通过的那一部分,就这样实现了任意形状的裁剪。
CCMotionStreak:
当初看到拖尾效果的时候惊异不少,设想自己要实现这个效果的话确实实现不出来,但是在看过特效实现之后再来想它感觉也不是很难了。说白了,就是使用三角图形将纹理分割拉伸,当纹理映射到三角图形上的之后就会有那种拖尾的效果,为什么选择三角形呢?因为opengl es只支持三角形,再者也可以近似模拟各种表面,比如说曲面。
CCProgressTimer:
kCCProgressTimerTypeBar类型的进度效果就不说了,这很简单。kCCProgressTimerTypeRadial类型初看的时候感觉挺复杂,但是想通了之后也挺简单。通过判断中点、旋转过后的移动点与原始贴图四条边的相交点,就可以生成一个四边形,但是如果进度显示超过半圆之后就需要生成2个四边形。
CCRenderTexture:
使用opengl fbo技术,参考: fbo
uml图:
略
使用方式:
可以参考TestCpp:MotionStreakTest,ClippingNodeTest,ActionsProgressTest,RenderTextureTest的实例代码。
扩展:
略