1

比较

http://pastebin.com/vkTJt0sT

我正在尝试渲染与左侧类似的图像并且遇到阴影+反射问题。

现在,只有影子代码打开来显示问题。

如您所见,红色球应该在绿色球附近出现阴影,但是由于某种奇怪的原因,像素都被弄乱了。当我关闭代码的阴影部分时,它会正常渲染红球而没有阴影。

我认为这个问题的根源也在影响反射。希望大家能给我一些建议;我正在失去它。

4

2 回答 2

4

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

此方法仅适用于凸形。如果您有可以进行自阴影的形状(例如环面),则需要更通用。通常的方法是定义一个epsilon(浮点误差容限)并忽略任何比它更近的交点。

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

于 2013-07-16T23:17:25.357 回答
0

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

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

于 2013-07-17T10:24:27.643 回答