您当前的位置:首页 VR开发 Unity 正文

Untiy中的数据平滑处理

查看: 2068| 评论: 1 2016-11-8 09:27 PM| 发布者: administrator |原作者: cartzhang

数据平滑处理

由于需要处理硬件的传给数据,硬件是其他商家的。 
坑爹的是发送频率太低了,20HZ左右,也是服气了。好处有么,肯定是便宜。 
这个用在VR游戏上,不做评论了。 
既然这样,生活还得继续!!! 
怎么办?

插值

第一考虑的就是插值。 
插值,内插和外推插值。插值算法,有多种,5点,7点,二次插值等,不一一列举。 
游戏的帧率在DK2上75fps,这帧率插值,需要至少有2秒数据,再加上硬件数据的抖动,个人觉得这不算是个好的方案。

缓动函数

在ITween中有个缓动曲线函数。 
这个不错啊!我们来细说下。

1.先看看各种函数都长啥样?

截图: 

2.网址介绍

相关网址啊: 
http://easings.net/zh-cn#

说明网址上的各个图都是可以点开,动态的哦。

http://robertpenner.com/easing/easing_demo.html 
这个也是可以看看每个曲线的样子。真是方便啊!!

微软msdn上带有代码和图例的 
https://msdn.microsoft.com/zh-cn/library/ee308751.aspx

3.在看看所有曲线种类。

可以在ITween中找到EaseType.

 public enum EaseType{
        easeInQuad,
        easeOutQuad,
        easeInOutQuad,
        easeInCubic,
        easeOutCubic,
        easeInOutCubic,
        easeInQuart,
        easeOutQuart,
        easeInOutQuart,
        easeInQuint,
        easeOutQuint,
        easeInOutQuint,
        easeInSine,
        easeOutSine,
        easeInOutSine,
        easeInExpo,
        easeOutExpo,
        easeInOutExpo,
        easeInCirc,
        easeOutCirc,
        easeInOutCirc,
        linear,
        spring,
        /* GFX47 MOD START */
        //bounce,
        easeInBounce,
        easeOutBounce,
        easeInOutBounce,
        /* GFX47 MOD END */
        easeInBack,
        easeOutBack,
        easeInOutBack,
        /* GFX47 MOD START */
        //elastic,
        easeInElastic,
        easeOutElastic,
        easeInOutElastic,
        /* GFX47 MOD END */
        punch
    }


根据需要各区所需啊!!不一定要全部都带上。

4. 函数代码:

ITween中这个代码比较长,代码中更多的是算法。 
代码在ITween.cs中,就不一一贴上来。

缓动曲线代码

我需要的只有这些曲线,其他的不需要,就摘了出来,写成了静态函数,这样方便在需要时候直接调用。

/************************************************************************** Copyright:@cartzhang Author: cartzhang Date: Description: **************************************************************************/ using UnityEngine; using System.Collections; public enum EaseType:int { easeInQuad, //easeOutQuad, easeInOutQuad, easeInCubic, //easeOutCubic, easeInOutCubic, easeInQuart, //easeOutQuart, easeInOutQuart, easeInQuint, //easeOutQuint, easeInOutQuint, //easeInSine, //easeOutSine, //easeInOutSine, easeInExpo, //easeOutExpo, easeInOutExpo, //easeInCirc, //easeOutCirc, easeInOutCirc, //linear, //spring, ///* GFX47 MOD START */ ////bounce, //easeInBounce, //easeOutBounce, //easeInOutBounce, ///* GFX47 MOD END */ //easeInBack, //easeOutBack, //easeInOutBack, ///* GFX47 MOD START */ ////elastic, //easeInElastic, //easeOutElastic, //easeInOutElastic, ///* GFX47 MOD END */ //punch } public class DataAlgorithm { #region Easing Curves public static float linear(float start, float end, float value) { return Mathf.Lerp(start, end, value); } public static float clerp(float start, float end, float value) { float min = 0.0f; float max = 360.0f; float half = Mathf.Abs((max - min) / 2.0f); float retval = 0.0f; float diff = 0.0f; if ((end - start) < -half) { diff = ((max - start) + end) * value; retval = start + diff; } else if ((end - start) > half) { diff = -((max - end) + start) * value; retval = start + diff; } else retval = start + (end - start) * value; return retval; } public static float spring(float start, float end, float value) { value = Mathf.Clamp01(value); value = (Mathf.Sin(value * Mathf.PI * (0.2f + 2.5f * value * value * value)) * Mathf.Pow(1f - value, 2.2f) + value) * (1f + (1.2f * (1f - value))); return start + (end - start) * value; } public static float easeInQuad(float start, float end, float value) { end -= start;

52VR.COM微信扫一扫
52vr公众号
专注于VR的学习、开发和人才交流

52VR开发交流

相关推荐

已有 1 人参与

发表评论

您需要登录才可以回帖 登录 | 立即注册

  • 回复 LINSHR 2017-8-17 11:41 AM
    看着不错 值得学习~

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-22 02:51 AM

返回顶部