Rust를 통한 RayTracing 병렬화
우선 병행화그림만 출력하는 프로그램를 시도했다.
배울 점은 라이온과 itertools를 사용할 때 파라다이스심지어 곤두박질도 할 수 있다.
나는 전선을 올려놓았다.
use itertools::iproduct;
use rayon::prelude::*;
use rayon::iter::ParallelBridge;
#[derive(Copy, Clone)]
pub struct Vec3<T: Copy> {
pub x: T,
pub y: T,
pub z: T
}
fn pixel_color(r: f64, g: f64, b: f64) -> Vec3<u32>
{
const scale: f64 = 255.99;
return Vec3 {x: (scale * r) as u32, y: (scale * g) as u32, z:(scale * b) as u32}
}
fn main() {
const w: u32 = 256;
const h: u32 = 256;
let mut image: Vec<(u32, u32, Vec3<u32>)> = iproduct!(0..w, 0..h).par_bridge().map(|(i, j)| {
let r = i as f64/(w - 1) as f64;
let g = j as f64/(h - 1) as f64;
let b = 0.25f64;
(i, h - j, pixel_color(r, g, b))
}).collect();
image.sort_by(|a, b| a.0.cmp(&b.0));
image.sort_by(|a, b| a.1.cmp(&b.1));
println!("P3\n {} {} \n255", w, h);
for (i, j, p) in image {
println!("{} {} {}", p.x, p.y, p.z);
}
}
Reference
이 문제에 관하여(Rust를 통한 RayTracing 병렬화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nuco/articles/f813c678387e16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)