c++ - 定点硬件光线追踪产品补偿

标签 c++ hardware raytracing fixed-point

我正在尝试复制射线-三角形相交整数演算的实现,我的代码基于 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 页的论文中,它指出 kpkq 是整数值。使用定点时,只需在将 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/

相关文章:

android - 线路立体声/2 声道录音

c++ - Ray Tracer,阴影射线产生黑圈?

c++ - 光线追踪阴影

c++ - 为什么标准 C++ 库中没有 `int pow(int base, int exponent)`?

c++ - 对 vector 的一部分进行排序(就地)

assembly - Gameboy 旋转说明

在 AIX 上使用 ioctl 的网络接口(interface)的硬件地址

glsl - 着色器中边界卷层次结构的遍历

动态大小的多维数组的 C++ 解决方法

c++ - C++中是否有可变长度数组?