Rustでレイトレーシング 0 準備

レイトレーシングを常々やってみようと思っていていた。
ちょうどよくRustという言語が波に乗り始めているらしいので
ついでにRustでレイトレーシングを書く

とは言っても0から何も見ずに書くのは学習も進まないので

これを参考に
C++のアナロジーでRustを学習しつつレイトレーシングを書いてゆく。

本の方はステップアップ方式で書いてあるが完成形は既にアップロードされており
この本の筆者のgithubは以下である。
github.com

今回は準備編

$ cargo new rust_ray01 --bin
$ cargo run
Compiling rust_ray01 v0.1.0 ()
Finished dev [unoptimized + debuginfo] target(s) in 0.96 secs
Running `target/debug/rust_ray01`
Hello, world!

最初に利用するcrate

  • image
  • nalgebra

Cargo.tomlに以下を追記

[dependencies]
image = "*"
nalgebra = "*"

必要になったcrateは順次追加

ディレクトリ構成

ファイル分割を容易にするために、以下も追記

[lib]
name = "renderer"
path = "src/lib.rs"

./src/lib.rsをmain.rsから見たrenderer crateとして使う?

f:id:katakanan:20171226225712p:plain:w400
core以下に色々と置く予定

Hello world

main.rs

extern crate renderer;
use renderer::*;

fn main() {
    println!("Hello, world!");
    println!("{}", hello());
}

lib.rs

extern crate image;
extern crate nalgebra as ns;

pub fn hello() -> String {
    "hello".to_string()
}
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.77 secs
     Running `target/debug/rust_ray01`
Hello, world!
hello