0

このコード マインドの記事、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

このような単純なモデルでは、入射光に次の 4 つのことが起こります。 1) 指向反射 2) 拡散反射 3) 吸収 4) 透過

いくつかの(理想化された)例:

  • ミラー: 指向反射のみ
  • 白: 拡散反射のみ
  • 黒:吸収のみ
  • 反射防止ガラス:透過のみ

吸収は、3 つの係数の合計を 1 より小さい値に設定することによって暗黙的に処理されます。

実際には、材料に依存する平均偏差でほぼ理想的な方向にのみ進む反射のみ、それ自体で光を放出する材料、方向性があるか色を変更する異常な反射効果など、いくつかの追加効果があります...

于 2013-04-28T19:03:25.423 に答える
0

基本的に、コード内のコメントに答えが表示されます。

光線は透過、反射、拡散反射します。後の 2 つは物理的には同じですが、レイトレーシングでは 2 つは異なる方法で処理されます。

1 つ目は鏡のようにハイライトと実際の反射を生成しますが、拡散部分は鏡とは非常に異なって見えるゴムのような表面に重要です。

于 2013-04-28T18:48:29.307 に答える