pebbleでraytracer

先日、大人の放課後シリーズ – connpass の懇親会で @hotwatermorningさんがレイトレーシングのプログラムは特別なライブラリ無しで、ちょっと頑張ればできて、見た目もCG!ってのが出来上がるので面白いということを話していました。

聞いてから風邪で1週間ほどぐだーっとしていましたが、ついに触ってみました。まず、面倒な勉強は置いといて(ぉぃ)、さくっと実装できるものはないかと探していたら Tiny Raytracer という文字数が短めなのを見つけました。

といっても短い方は解読不能なので、オリジナルのコメント付きソースを真似てみることにしました。

オリジナルを動かしてみる

まず、Tiny Raytracerのコメント付きのファイル があるので、これを動かします。

02 original

動かすとそれはもうCG!といった感じの画像が出てきます。テッカテカ。

pebbleで表示するようにオブジェクトを変える

pebbleだとメモリの制限もあり、大きな画像を操作するのは厳しそうなので、60×60くらいにして、オブジェクトも2つにします。

大きさを変えてオブジェクトを2つにする

03 change objects

うまく調整できませんでしたが、まずまず。

モノクロ化

pebbleは白黒しか表示できないので、グレースケール化した上で誤差拡散法で画像をいい具合にします。

これらを参考に処理を作って画像を加工。高専の頃にPaintShopProをパクってPaintShopAmaとか作ってたのを思い出します。

04 mono

さてそれっぽい画像がでるようになりました!

pebbleに移植

さぁ、あとはがんばってC言語へ移植!

pebble_tiny_ratracer

なんとかC言語っぽくなってきたので、いざ実行!

ボタンを押して描画を待つ・・・

待つ・・・

待つ・・・・

・・・きた!(20秒くらい)

05 pebble

(゜-゜)

(゜-゜)。o(なんかおかしい

まとめ

プログラミング能力がとても足りていないようですが、メモリを節約しつつ、処理の無駄を無くせば、そこそこの処理時間でそこそこの出力ができそうな気がします。

修正はまた後日・・・