【问题标题】:Fixed Point Hardware Ray Tracing products compensation定点硬件光线追踪产品补偿
【发布时间】:2019-07-31 16:36:21
【问题描述】:

我正在尝试复制射线三角形相交的整数演算的实现,并且我的代码基于 Johannes Hanika (https://jo.dreggn.org/home/2007_master.pdf) 的工作。

但我有一个问题,我认为这是 Hanika 实现的以下几行:

long long int u = (long long int)e1p*kq - (long long int)e1q*kp;
long long int v = (long long int)e2q*kp - (long long int)e2p*kq;

我认为这些产品应该有某种补偿,比如右移 (m - 1),就像代码的其他部分一样。

我已经在我的代码中做了这个补偿,它只能这样工作。

这里有人曾经实现过他的这个代码吗?或者对这个问题有什么猜测?

【问题讨论】:

    标签: c++ hardware raytracing fixed-point


    【解决方案1】:

    在第 30 页的论文中,它指出 kp 和 kq 是整数值。使用定点时,只需将 2 个定点值相乘时进行归一化。

    int kp = O[p] + ((t*omega[p]) >> (m-1)) - pp;
    int kq = O[q] + ((t*omega[q]) >> (m-1)) - pq;
    long long int u = (long long int)e1p*kq - (long long int)e1q*kp;
    long long int v = (long long int)e2q*kp - (long long int)e2p*kq;
    

    【讨论】:

    • 严格来说,只有当目标值的指数不等于操作数的指数之和时。
    • e1p, e1q, e2p, e2q 也是定点,如第 27 页所述,在结构定义内部: (int e1q, e2q; // 有符号定点) 和 (int e1p, e2p ; // 在 (-2^-E, 2^-E))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 2019-11-29
    • 2011-12-08
    • 2014-06-18
    • 2012-05-23
    相关资源
    最近更新 更多