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",
|
"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",
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
24
src/main.rs
24
src/main.rs
|
|
@ -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.,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
13
src/trace.rs
13
src/trace.rs
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user