我用Python启动了一个射线跟踪项目。我为每个像素创建了一个CUDA内核和一个trace()函数。它在计算交叉口、阴影和兰伯特阴影时工作得很好,但是当我从球体表面引入反射时,我会在投影球面盘的边缘得到一个“带”,而我不知道为什么。
图像结果:https://imgur.com/a/LoXOyl5
N = P - C
N = N / norm(N) R = D - 2 * (D * N ) * N
R = R / norm(R) P = P + 1e-4 * R color_refl = trace(ray_origin=P, ray_direction=R) color = color + color_refl * reflect_intensity备注:
下面是跟踪和反射跟踪函数的源代码:https://github.com/Speterius/ray_追踪/blob/主/库达_射线_tracing.py
发布于 2019-08-10 16:48:01
这一问题是由于对反射方向矢量的不正确计算造成的。对于D射线方向和N的法向量:
R = D - 2 * dot(D, N) * N造成这一问题的原因是计算R的组成部分如下:
R[i] = D[i] - 2 * (D[i] * N[i]) * N[i]我花了一段时间才发现这个错误,因为这对水平面产生了正确的反射。
https://computergraphics.stackexchange.com/questions/9063
复制相似问题