Use GLAM
This commit is contained in:
parent
497123c830
commit
6ba3daf454
10
Cargo.lock
generated
10
Cargo.lock
generated
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
24
src/main.rs
24
src/main.rs
|
|
@ -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.,
|
||||
},
|
||||
|
|
|
|||
13
src/trace.rs
13
src/trace.rs
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user