Rustでの演算子オーバーロードを行うために、構造体にAdd/Mul/Div Traitを実装する。
これを用いることで足し算、掛け算、割り算の演算子を使える。
スーパーサンプリングは光線の方向にランダムな要素を加えて、その方向から得られた色から平均をとることで物体のジャギを抑える事ができる。
rand::thread_rng().gen_range(a, b);
でa~bの乱数を得られる。 rand crateが必要なのでCargo.tomlに追加する。
ついでに実行時引数でスーパーサンプリングの回数を変更可能にした。
スーパーサンプリングを10回行った場合。
左がスーパーサンプリングなし。
右がスーパーサンプリングあり。
なんとなくjpgっぽさが?ある
あと実行時間の比較。
雑だがスレッド数8のときのほうが5倍ぐらい速い。
Ray Tracing in One Weekend (Ray Tracing Minibooks Book 1) (English Edition)
- 作者: Peter Shirley
- 発売日: 2016/01/26
- メディア: Kindle版
- この商品を含むブログを見る
Programming Rust: Fast, Safe Systems Development
- 作者: Jim Blandy,Jason Orendorff
- 出版社/メーカー: O'Reilly Media
- 発売日: 2017/11/21
- メディア: Kindle版
- この商品を含むブログを見る