位置: 编程技术 - 正文
推荐整理分享cocos2dx CardinalSpline和CatmullRom算法,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
想想那些鱼儿游动的漂亮曲线,还记得水果忍者的手指划过那一道道划痕吗,众所周知这一切都是很多个点组成的线段,这些都离不开样条插算法。
特别注意:CardinalSpline和CatmullRom这两种算法都是过点式,就是形成的曲线一定经过样品点,但是贝塞尔曲线就不一定经过所有的样品点
cocos2dx中主要有两处用到了:
一个是Action下面类:points代表样品点集合,tension代表张力因子,实际效果是如果等于1就是画直直的线,默认等于0.5,就是比较平滑的线,一般去0到1直之间调节
CardinalSplineBy::create(float duration, cocos2d::PointArray *points, float tension)
CardinalSplineTo::create(float duration, cocos2d::PointArray *points, float tension)
CatmullRomTo::create(float duration, cocos2d::PointArray *points)//等效于上面的tension=0.5
CatmullRomBy::create(float duration, cocos2d::PointArray *points)//等效于上面的tension=0.5
一个是DrawNode类下面成员函数,用来画图segments代表共用几个点来形成这条曲线
void drawCardinalSpline(PointArray *points, float tension, unsigned int segments, const Color4F &color);
void drawCatmullRom(PointArray *points, unsigned int segments, const Color4F &color);
cocos2dx中核心源码:
注解:
这里面lt特别不好理解,实际上这里是吧segments个点平均分成points总数个部分,每个segment的点占自己部分的百分比就是这个lt的意思,
这里面p又是什么意思呢,实际上他就表示区间的序号,在同一个区间内p是一样的。
所以此算法大概的原理就是把需要生成的segments点按样品点总数平均分一下,在固定区间内,找到固定的4个实际样品点,然后在这个区间内按点所在这个区间比例位置逐
个使用ccCardinalSplineAt算法生成新点,是一种典型分治法。不过这些仅仅是程序理解,关于样条插算法推导过程估计还得找找大学专业的书本了。
这里通过cocos2dx源码,小小总结一下CatmullRom算法公式:
Cocos2d-x的学习之旅(二)HelloWorld 声明本教程仅用于初学cocos2dx同学使用,内容由本人(Code-Man)编写,此教程使用cocos2dx版本为3.4。本教程内容可以自由转载,但必须同时附带本声明,或
屏蔽多点触摸 环境cocos2d-x-3.1.1ios版本找到AppController.mm修改方法-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions中[eaglViewsetMultipleTouchEnab
Android NDK Cocos2dx 3.4 Label中文显示 小白一个,因为中文显示问题上网找了一天,解决办法大部分不合适(因为复杂,小白嘛=,=)TextFieldTTF可以显示中文,Label却不行,打开源码,豁然开朗
标签: cocos2dx CardinalSpline和CatmullRom算法
本文链接地址:https://www.jiuchutong.com/biancheng/368803.html 转载请保留说明!友情链接: 武汉网站建设