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

View File

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

View File

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

View File

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