Personal Projects

The Ray Tracer Challengeを読んでGo言語で実装してみた。

2022-07-24

『The Ray Tracer Challenge: A Test-Driven Guide to Your First 3D Renderer』を読み始めました。

この本はレイトレーサーの書き方についてのガイドです。私はCGについてほとんど知識がありませんが、スクラッチからレイトレーサーを書くことは良いプログラミングの練習になると思い、読み進めることにしました。本は特定の言語を指定していないため、Golangでレイトレーサーを実装することにしました。Golangを練習したかったからです。

第1章、第2章

第1章では、点、ベクトル、色などのコンピュータグラフィックスの基本概念について学びます。第2章では、キャンバスを作成して簡単なイメージを描きます。

本に従い、点、ベクトル、色、キャンバスを使って簡単なイメージを作成しました。

projectile

2022-07-24

第3章、第4章

第3章と第4章では、レイトレーサーの基本機能を実装します。第1章や第2章よりも少し難しかったですが、とても面白かったです。点、ベクトル、色、キャンバスを用いて時計のイメージを作成しました。すべての時計の点は、点、ベクトル、色、キャンバスを使用してマトリックス変換で描画されたものです。

clock

時計の上の画像を注意深く見ると点が見えます。

2022-07-28

第5章

いよいよ円を描いてレンダリングすることができました。

sphere

2022-07-29

第6章

レイトレーサーの実装はだんだん難しくなってきましたが、ますます面白くなってきました。

shading

2022-08-01

第7章、第8章

デバッグとユニットテストの勉強になりました。

scene

第9章

この章を読む前に既に構成を作っていました。球体だけでなく、他の形状も実装すると思ったからです。この章では、新しいシェイプとしてプレーンの追加について説明します。今思えば、OOP的なアプローチだったので、FP言語で違う方法で実装も面白いかもと思いました。

planes

2022-08-03

第10章

第10章のパターンを実装しました。

patterns

2022-08-04

第11章

Golangは素晴らしい言語ですね。バグを簡単に見つけることができました。Golangのタイプシステムのおかげです。この本もまた、素晴らしいです。

reflection

2022-08-07

第12章

キューブです!

cubes

2022-08-09

第13章、第14章

シリンダーとダブルナップコーンです。とても勉強になりました。デバッグ能力が向上しているのが実感できました。

cylinders

2022-08-12

第15章

最後に、オブジェクトファイルをロードして、結果を見ることができました。

ここで勉強は一旦終了します。まだいくつか章がありますが、ここで終わらせようと思います。最後まで本を読み切ることもできそうですが、新しいプロジェクトを始めることにしました。

Golangの使用はとても楽しかったです。

obj