0

在这篇 Code Mind 文章http://www.codermind.com/articles/Raytracer-in-C++-Depth-of-field-Fresnel-blobs.html中,关于反射/折射的部分有几个案例检查是否透射或反射光线。

它说 rand_num 在 0 到 1 的范围内:

if(rand_num<=reflectance){
    //reflect a ray
}else if(rand_num<=reflectance+transmittance){
    //transmit a ray through surface
}else{
    //diffuse calculation
}

我的印象是反射率+透射率= 1,所以 else 语句将毫无用处。如果不是 1-反射率,透射率应该是多少?

4

2 回答 2

1

在这样一个简单的模型中,入射光会发生四件事:1)定向反射 2)漫反射 3)吸收 4)透射率

几个(理想化的)例子:

  • 镜子:只有定向反射
  • 白色:仅漫反射
  • 黑色:仅吸收
  • 防反射玻璃:只有透光率

通过将三个系数的总和设置为小于 1 的值来隐式处理吸收。

在实践中,还有一些额外的影响,例如仅反射仅在理想方向上进行,平均偏差取决于材料,自身发光的材料,定向或改变颜色的不寻常反射效果......

于 2013-04-28T19:03:25.423 回答
0

它基本上在代码的注释中给出了答案:

光线被透射、反射或漫反射。物理上后两者是相同的,但在光线追踪中,两者的处理方式不同。

第一个像镜子一样产生高光和实际反射,而漫反射部分对于看起来与镜子非常不同的橡胶等表面很重要。

于 2013-04-28T18:48:29.307 回答