RustでRayTracingをはじめてみた

公開:2021/01/09
更新:2021/01/09
1 min読了の目安(約1000字TECH技術記事

はじめに

GPUのプログラミングをやるとき、前はopenclを使ってたのですが、古そうだし、色々探してwgpu-rsを使うことにしました。

GPUを使って速度向上を体感したかったので、良いプログラムないかなと探してたら、
RayTracingが良さそうでした。Blenderもやってるし、良い勉強になるかなと。

結果

とりあえず、Chapter2のところまでrustで実装してみて、画像が表示されるところまでは確認しました。

コードはこんな感じです。
castのasをもっと減らしたいです。

fn calc_rgb(r: f32, g: f32, b: f32) -> (i32, i32, i32)
{
    const scale: f32 = 255.99;

    return ((scale * r) as i32, (scale * g) as i32, (scale * b) as i32)
}

fn main() {

    const image_width: u32 = 256;
    const image_height: u32 = 256;

    println!("P3\n {} {} \n255", image_width, image_height);

    for j in (0..image_height).rev() {
        for i in 0..image_width {
            let rbg = calc_rgb(i as f32/(image_width - 1) as f32, j as f32/(image_height - 1) as f32, 0.25f32);
            println!("{} {} {}", rbg.0, rbg.1, rbg.2);
        }
    }
}