光线跟踪学习笔记week01_01
目的
用Rust造一个光线跟踪器
最终成果
来自下面的书籍
Rust 参考书
- Rust 程序设计语言(第一版)
- Rust 程序设计语言(第二版)
- 通过例子学 Rust
- 范长春.深入浅出Rust
光线追踪 参考书
-
Ray Tracing in One Weekend, by Peter Shirley
-
Ray Tracing: the Next Week, by Peter Shirley
-
Ray Tracing: The Rest Of Your Life, by Peter Shirley
在此下载 http://www.realtimerendering.com/
Rust 安装
演示
安装1.31版
Rust新建工程
打开一个文件夹
Shift+鼠标右键打开命令提示符
如果是win10应该是进入Powershell,进入后再输入
cmd
切换为命令提示符
cargo new week01_01 %新建可执行程序项目%
cd week01_01 %进入文件夹%
cargo build %构建%
cargo run %运行%
fn main() {
println!("Hello, world!");
}
PPM文件格式
P3
3 2
255
255 0 0 0 255 0 0 0 255
255 255 0 255 255 255 0 0 0
P3代表ascii编码,RGB三通道格式
每行3个像素,有2行
255代表 [0, 255] 取值范围,每个值为整数
可以每行换行,也可以每个像素换行
代码
将week01_01/src/main.rs的内容更改为
fn main() {
let nx = 200;
let ny = 100;
println!("P3");
println!("{} {}", nx, ny);
println!("255");
for j in (0..ny).rev() {
for i in 0..nx {
let r = (i as f32) / (nx as f32);
let g = (j as f32) / (ny as f32);
let b = 0.2f32;
let ir = (255.99 * r) as i32;
let ig = (255.99 * g) as i32;
let ib = (255.99 * b) as i32;
println!("{} {} {}", ir, ig, ib);
}
}
}
类型推导
let x = 1;
let x = 1i32;
let x: i32 = 1;
Range 结构体
0…ny
[0, ny)
(0…ny).rev()
(ny…0]
(0…ny).step_by(2)
0, 2, 4…ny
cargo run > a.ppm
务必使用CMD而不是powershell,因为ps输出的是UTF16编码
ppm可以用2345看图王打开
Generates a random value within half-open [0, 10) range (not including 10) with Rng::gen_range.