zoukankan      html  css  js  c++  java
  • KlayGE bug report

    在文件 KlayGE\Core\Include\KlayGE\Math.hpp 数学函数库中发现了mirror函数的Bug.
    例如调用: mirror( -10, 1, 2) 会出现死循环.(注意rang 未有使用过)

    还有就是 mirror函数和warp函数都使用了while循环, 当val与low和 high的差距比较大时,效率会降低.

    warp函数可以使用代替:

    template <typename T>
    inline T warp(T const & val, T const & len)
    {
    return val - (floor(val / len) * len);
    }

    template <typename T>
    inline T warp(T const & val, T const & low, T const & high)
    {
    return warp(val-low,high-low) + low;
    }

    因为未有对原mirror函数进行测试,所以下面代替有可能不符合原函数要求.

    template <typename T>
    inline T mirror(T const & val, T const & len)
    {
    return (len - (abs(warp(val,len * 2) - len)));
    }

    template <typename T>
    inline T mirror(T const & val, T const & low, T const & high)
    {
    return mirror(val-low,high-low) + low;
    }


    [注: 两函数参考自Unity3D API. 只测试过float.]

    还有一个问题请教下:
    template <typename T>
    T lerp(T const & lhs, T const & rhs, float s)
    {
    return lhs + (rhs - lhs) * s;
    }

    大多数引擎的 Lerp 函数都对参数s使用了从0到1的限制,你这样设计是为了快速(but unsafe)还是要求从调用者自己使用0~1的限制?为何要这样设计?谢谢~

  • 相关阅读:
    HttpContext.Current.Cache过期使用方法
    IE11下使用IE8
    Sqldbx连接oracle
    XML序列之System.Xml.Serialization
    怎样设置域名带www和不带www都可以访问
    log4net一些配置说明
    部署wcf到IIS时的问题
    spring.net学习(一) 搭建环境,实例化spring.net容器。
    WPF 多语言实现
    C# 类型转换问题
  • 原文地址:https://www.cnblogs.com/godzza/p/2849731.html
Copyright © 2011-2022 走看看