光线跟踪学习笔记week01_01

光线跟踪学习笔记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] 取值范围,每个值为整数
可以每行换行,也可以每个像素换行

扫描二维码关注公众号,回复: 5861551 查看本文章

代码

将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.

猜你喜欢

转载自blog.csdn.net/haseetxwd/article/details/84887950