探cocos2dx裁剪结点、拖尾效果、进度效果、渲染纹理实现(misc_nodes),源码版本(2.2.3)

模块包含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的实例代码。

扩展:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值