我正在尝试复制射线-三角形相交整数演算的实现,我的代码基于 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),就像代码的其他部分一样。
我已经在我的代码中做了这个补偿,而且它只能这样工作。
这里有人实现过他的这段代码吗?或者对这个问题有什么猜测吗?
最佳答案
在第 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;
关于c++ - 定点硬件光线追踪产品补偿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57295400/