光线追踪阴影bug

时间:2013-07-16 22:58:50

标签: c++ graphics raytracing

Comparison

http://pastebin.com/vkTJt0sT

我正在尝试渲染与左边图像类似且阴影+反射有问题的图像。

现在,只显示影子代码以显示问题。

正如你所看到的,红球应该在绿色球附近被遮挡,但是由于一些奇怪的原因,所有像素都会被弄乱。当我关闭代码的阴影部分时,它会正常渲染红色球。

我认为这个问题的根源也会影响反思。希望你们能给我一些提示;我输了。

2 个答案:

答案 0 :(得分:4)

鉴于您的左侧图像显示癌症,这是阴影射线击中被反射的物体的经典案例。在对阴影射线进行击中测试时,您需要排除生成射线的表面。只需将源对象传递给阴影函数,然后忽略它。

此方法仅适用于凸形。如果你的形状有自阴影(例如圆环),你需要更加通用。通常的方法是定义 epsilon (浮点误差容差)并忽略任何比它更近的交叉点。

另一种方法是检测您击中的表面的。你不应该在球体上自阴影,因为射线的投射方向与表面法线相同(出射光线的点积和表面法线是正的) - 这应该是不算是影子。

答案 1 :(得分:0)

解决: 有一个算法问题不容易解释,

另一种方法是:基本上我检查余弦角是否大于0.0001,如果它大于那么我不会遮挡它