手指划痕的实现 和 catmull rom 算法

来源:互联网 发布:windows内核存在漏洞 编辑:程序博客网 时间:2024/04/27 15:46

记一个笔记.

最近给项目做手指划痕,类似水果忍者的效果.实现的思路是在手指划动过程中,采集关键点.

根据这些关键点,计算和生成triangle strip .最后把2d texture 影射到这个生成后的不规则图形中.

这样划屏效果就出来了.


但在实现的最后遇到一个问题:

即使每帧都取关键点, 在帧数低的情况下,依然会出现不圆滑的情况.由此,想到给关键点插值. 

本人数学不好,没有找到好的插值算法, 就了解到叫做  catmull rom 的插值算法.


该函数的作用是,根据  p0,p1,p2,p3 4 个连续点的坐标, 在 p1 和 p2 之间,根据参数 t (取值范围[0.0f,1.0f])插值,使得曲线更平滑.

在网上搜索好久,都只有 catmull rom 的应用, 或者纯数学推理.  

把catmull rom 的实现写出来的,我还没有找到.自己又不会推导...记录关键代码抄录在此.


ps:

这些知识应该涉及到导数 ,高等数学各种插值算法.吐槽一下大学教育,只教人做题,不教人这些知识为什么要存在.

鄙视鄙视自己的数学水平..

core::vector3df CatmullRom(vector3df P0, vector3df P1, vector3df P2, vector3df P3, f32 t){#ifdef USE_ORIGINAL_CATMULLROMf32 s = t;f32 s2 = s * s;f32 s3 = s2 * s;f32 f1 = -0.5f * s3 + s2 - 0.5f *s;f32 f2 = 1.5f * s3 - 2.5f * s2 + 1.0f;f32 f3 = -1.5f * s3 + 2.0f * s2 + 0.5f * s;f32 f4 = 0.5f * s3 - 0.5f * s2;core::vector3df curvePoint = f1 * P0 + f2 * P1 + f3 * P2 + f4 * P3;return curvePoint;#elsefloat factor = 0.5;vector3df c0 = P1;vector3df c1 = factor * (P2 - P0);vector3df c2 = 3.f * (P2 - P1) - factor * (P3 - P1) - 2.f * factor * (P2 - P0);vector3df c3 = -2.f * (P2 - P1) + factor * (P3 - P1) + factor * (P2 - P0);vector3df curvePoint = c3 * t * t * t + c2 * t * t + c1 * t + c0;return curvePoint;#endif


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 sim卡显示无服务怎么办 华为麦芒进水无限开关机怎么办 华为麦芒5进水黑屏怎么办 华为麦芒6进水了怎么办 4g手机开不开机怎么办 全屏钢化膜总是翘边怎么办 华为麦芒屏幕触屏失灵怎么办 华为麦芒5运行慢怎么办 手机屏保密码忘记了怎么办 麦芒5密码锁忘了怎么办 超薄手机壳松了怎么办 华为麦芒5声音小怎么办 笔记本外壳a面裂了怎么办 苹果手机外壳摔坏了怎么办 挂衣服肩膀出包怎么办 摩拜单车手机号注销了怎么办 摩拜单车手机号码换了怎么办 摩拜单车换手机号码打不开怎么办 摩拜单车丢了怎么办 摩拜单车忘锁了怎么办 透明手机壳粘指纹怎么办 tpu手机壳变黄了怎么办 0pp0手机声音小怎么办 橡胶皮套晒坏了怎么办 宝宝晚上吹空调发烧怎么办 玩手机手指尖疼怎么办 手机型号不支持微信运动怎么办 手腕向下压会疼怎么办 手腕韧带拉伤怎么办恢复快 华为手机用车载充电慢怎么办 华为麦芒6充电慢怎么办 oppo手机压弯了怎么办 麦芒5电池不耐用怎么办 华为7x照相模糊怎么办 华为麦芒6照相虚怎么办 荣耀8gps信号弱怎么办 华为麦芒4手机卡顿怎么办 华为麦芒4玩游戏卡怎么办 sim卡换卡通讯录丢了怎么办 换sim卡通讯录怎么办 麦芒4开不了机怎么办