This commit is contained in:
numzero 2024-12-22 00:31:12 +03:00
parent 497123c830
commit 6ba3daf454
4 changed files with 33 additions and 15 deletions

10
Cargo.lock generated
View File

@ -439,6 +439,15 @@ dependencies = [
"xml-rs", "xml-rs",
] ]
[[package]]
name = "glam"
version = "0.29.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "glow" name = "glow"
version = "0.14.2" version = "0.14.2"
@ -1164,6 +1173,7 @@ name = "raytracing3"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"glam",
"pollster", "pollster",
"wgpu", "wgpu",
"winit", "winit",

View File

@ -5,6 +5,7 @@ edition = "2021"
[dependencies] [dependencies]
bytemuck = { version = "1.21.0", features = ["derive"] } bytemuck = { version = "1.21.0", features = ["derive"] }
glam = { version = "0.29.2", features = ["bytemuck"] }
pollster = "0.4.0" pollster = "0.4.0"
wgpu = "23.0.1" wgpu = "23.0.1"
winit = "0.30.6" winit = "0.30.6"

View File

@ -1,5 +1,6 @@
use std::error::Error; use std::error::Error;
use glam::{vec2, vec3};
use trace::{Sphere, Tracer, TracerData, Vertex}; use trace::{Sphere, Tracer, TracerData, Vertex};
use winit::{ use winit::{
event::{Event, WindowEvent}, event::{Event, WindowEvent},
@ -14,9 +15,14 @@ fn make_viewport(w: u32, h: u32) -> [Vertex; 4] {
let h = h as f32; let h = h as f32;
let (w, h) = (1.0f32.max(w / h), 1.0f32.max(h / w)); let (w, h) = (1.0f32.max(w / h), 1.0f32.max(h / w));
let r = 3.0f32; let r = 3.0f32;
let screen_coord = [[-h, -w], [h, -w], [-h, w], [h, w]]; let screen_coord = [vec2(-h, -w), vec2(h, -w), vec2(-h, w), vec2(h, w)];
let eye = [-r, 0.0, 0.0]; let eye = vec3(-r, 0.0, 0.0);
let world_coord = [[0.0, -1.0, -1.0], [0.0, 1.0, -1.0], [0.0, -1.0, 1.0], [0.0, 1.0, 1.0]]; let world_coord = [
vec3(0.0, -1.0, -1.0),
vec3(0.0, 1.0, -1.0),
vec3(0.0, -1.0, 1.0),
vec3(0.0, 1.0, 1.0),
];
[0, 1, 2, 3].map(|k| Vertex { [0, 1, 2, 3].map(|k| Vertex {
eye, eye,
world: world_coord[k], world: world_coord[k],
@ -49,18 +55,18 @@ fn main() {
&tracer, &tracer,
&[ &[
Sphere { Sphere {
center: [0.0, 0.0, 0.0], center: vec3(0.0, 0.0, 0.0),
radius: 0.5, radius: 0.5,
emit_color: [0.0, 0.0, 0.5], emit_color: vec3(0.0, 0.0, 0.5),
reflect_color: [1.0, 0.5, 0.0], reflect_color: vec3(1.0, 0.5, 0.0),
pad1: 0., pad1: 0.,
pad2: 0., pad2: 0.,
}, },
Sphere { Sphere {
center: [-2.0, 0.0, 2.0], center: vec3(-2.0, 0.0, 2.0),
radius: 0.5, radius: 0.5,
emit_color: [0.5, 0.5, 0.5], emit_color: vec3(0.5, 0.5, 0.5),
reflect_color: [0.0, 0.5, 0.0], reflect_color: vec3(0.0, 0.5, 0.0),
pad1: 0., pad1: 0.,
pad2: 0., pad2: 0.,
}, },

View File

@ -1,6 +1,7 @@
use std::mem::{self, offset_of}; use std::mem::{self, offset_of};
use bytemuck::{bytes_of, cast_slice, Pod, Zeroable}; use bytemuck::{bytes_of, cast_slice, Pod, Zeroable};
use glam::{Vec2, Vec3};
use wgpu::util::DeviceExt; use wgpu::util::DeviceExt;
#[derive(Debug, Clone, Copy, Pod, Zeroable)] #[derive(Debug, Clone, Copy, Pod, Zeroable)]
@ -14,20 +15,20 @@ pub struct Params {
#[derive(Debug, Clone, Copy, Pod, Zeroable)] #[derive(Debug, Clone, Copy, Pod, Zeroable)]
#[repr(C)] #[repr(C)]
pub struct Sphere { pub struct Sphere {
pub center: [f32; 3], pub center: Vec3,
pub radius: f32, pub radius: f32,
pub emit_color: [f32; 3], pub emit_color: Vec3,
pub pad1: f32, pub pad1: f32,
pub reflect_color: [f32; 3], pub reflect_color: Vec3,
pub pad2: f32, pub pad2: f32,
} }
#[derive(Debug, Clone, Copy, Pod, Zeroable)] #[derive(Debug, Clone, Copy, Pod, Zeroable)]
#[repr(C)] #[repr(C)]
pub struct Vertex { pub struct Vertex {
pub eye: [f32; 3], pub eye: Vec3,
pub world: [f32; 3], pub world: Vec3,
pub screen: [f32; 2], pub screen: Vec2,
} }
pub struct Tracer { pub struct Tracer {