• 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的限制?为何要这样设计?谢谢~

  • 相关阅读:
    nginx源码分析——http模块
    linux 信号处理
    文件读写监控(inotify, systemtap)
    rem
    vscode 将本地项目上传到码云
    vue 模拟去哪网
    form 文件上传
    分页
    修改默认select样式
    模拟select下拉框、复选框效果
  • 原文地址:https://www.cnblogs.com/godzza/p/2849731.html
Copyright © 2020-2023  润新知