going to switch the lights over to using position, or maybe flesh out directional light more

master
mitchellhansen 4 years ago
parent 2c9ce75b8b
commit 9665a70bac

@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

@ -0,0 +1,163 @@
# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib light.mtl
o Cone
v -0.739722 -0.000000 -0.429722
v -0.739722 -0.083835 -0.421465
v -0.739722 -0.164448 -0.397011
v -0.739722 -0.238741 -0.357301
v -0.739722 -0.303859 -0.303859
v -0.739722 -0.357301 -0.238741
v -0.739722 -0.397011 -0.164448
v -0.739722 -0.421465 -0.083835
v -0.739722 -0.429722 -0.000000
v -0.739722 -0.421465 0.083835
v -0.739722 -0.397011 0.164447
v -0.739722 -0.357301 0.238741
v -0.739722 -0.303859 0.303859
v -0.739722 -0.238741 0.357301
v -0.739722 -0.164447 0.397011
v -0.739722 -0.083835 0.421465
v -0.739722 0.000000 0.429722
v -0.739722 0.083835 0.421465
v -0.739722 0.164448 0.397011
v -0.739722 0.238741 0.357301
v -0.739722 0.303860 0.303859
v -0.739722 0.357301 0.238741
v -0.739722 0.397012 0.164447
v 0.119722 0.000000 0.000000
v -0.739722 0.421465 0.083834
v -0.739722 0.429722 -0.000000
v -0.739722 0.421465 -0.083835
v -0.739722 0.397011 -0.164448
v -0.739722 0.357301 -0.238741
v -0.739722 0.303859 -0.303860
v -0.739722 0.238740 -0.357301
v -0.739722 0.164447 -0.397012
v -0.739722 0.083834 -0.421465
vn 0.4455 -0.0878 -0.8910
vn 0.4455 -0.2599 -0.8567
vn 0.4455 -0.4220 -0.7896
vn 0.4455 -0.5680 -0.6921
vn 0.4455 -0.6921 -0.5680
vn 0.4455 -0.7896 -0.4220
vn 0.4455 -0.8567 -0.2599
vn 0.4455 -0.8910 -0.0878
vn 0.4455 -0.8910 0.0878
vn 0.4455 -0.8567 0.2599
vn 0.4455 -0.7896 0.4220
vn 0.4455 -0.6921 0.5680
vn 0.4455 -0.5680 0.6921
vn 0.4455 -0.4220 0.7896
vn 0.4455 -0.2599 0.8567
vn 0.4455 -0.0878 0.8910
vn 0.4455 0.0878 0.8910
vn 0.4455 0.2599 0.8567
vn 0.4455 0.4220 0.7896
vn 0.4455 0.5680 0.6921
vn 0.4455 0.6921 0.5680
vn 0.4455 0.7896 0.4220
vn 0.4455 0.8567 0.2599
vn 0.4455 0.8910 0.0878
vn 0.4455 0.8910 -0.0878
vn 0.4455 0.8567 -0.2599
vn 0.4455 0.7896 -0.4220
vn 0.4455 0.6921 -0.5680
vn 0.4455 0.5680 -0.6921
vn 0.4455 0.4220 -0.7896
vn 0.4455 0.2599 -0.8567
vn 0.4455 0.0878 -0.8910
vn -1.0000 -0.0000 -0.0000
usemtl None
s off
f 1//1 24//1 2//1
f 2//2 24//2 3//2
f 3//3 24//3 4//3
f 4//4 24//4 5//4
f 5//5 24//5 6//5
f 6//6 24//6 7//6
f 7//7 24//7 8//7
f 8//8 24//8 9//8
f 9//9 24//9 10//9
f 10//10 24//10 11//10
f 11//11 24//11 12//11
f 12//12 24//12 13//12
f 13//13 24//13 14//13
f 14//14 24//14 15//14
f 15//15 24//15 16//15
f 16//16 24//16 17//16
f 17//17 24//17 18//17
f 18//18 24//18 19//18
f 19//19 24//19 20//19
f 20//20 24//20 21//20
f 21//21 24//21 22//21
f 22//22 24//22 23//22
f 23//23 24//23 25//23
f 25//24 24//24 26//24
f 26//25 24//25 27//25
f 27//26 24//26 28//26
f 28//27 24//27 29//27
f 29//28 24//28 30//28
f 30//29 24//29 31//29
f 31//30 24//30 32//30
f 32//31 24//31 33//31
f 33//32 24//32 1//32
f 8//33 16//33 25//33
f 33//33 1//33 2//33
f 2//33 3//33 4//33
f 4//33 5//33 6//33
f 6//33 7//33 4//33
f 7//33 8//33 4//33
f 8//33 9//33 10//33
f 10//33 11//33 8//33
f 11//33 12//33 8//33
f 12//33 13//33 16//33
f 13//33 14//33 16//33
f 14//33 15//33 16//33
f 16//33 17//33 18//33
f 18//33 19//33 20//33
f 20//33 21//33 22//33
f 22//33 23//33 25//33
f 25//33 26//33 27//33
f 27//33 28//33 29//33
f 29//33 30//33 33//33
f 30//33 31//33 33//33
f 31//33 32//33 33//33
f 33//33 2//33 4//33
f 16//33 18//33 25//33
f 18//33 20//33 25//33
f 20//33 22//33 25//33
f 25//33 27//33 33//33
f 27//33 29//33 33//33
f 33//33 4//33 8//33
f 8//33 12//33 16//33
f 33//33 8//33 25//33
o Cube_Cube.001
v -0.377020 -0.377020 0.377020
v -0.377020 0.377020 0.377020
v -0.377020 -0.377020 -0.377020
v -0.377020 0.377020 -0.377020
v 0.377020 -0.377020 0.377020
v 0.377020 0.377020 0.377020
v 0.377020 -0.377020 -0.377020
v 0.377020 0.377020 -0.377020
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 35//34 36//34 34//34
f 37//35 40//35 36//35
f 41//36 38//36 40//36
f 39//37 34//37 38//37
f 40//38 34//38 36//38
f 37//39 39//39 41//39
f 35//34 37//34 36//34
f 37//35 41//35 40//35
f 41//36 39//36 38//36
f 39//37 35//37 34//37
f 40//38 38//38 34//38
f 37//39 35//39 39//39

@ -157,15 +157,16 @@ impl CameraController {
(1.0 * camera.pitch.0.sin() * camera.yaw.0.cos()), (1.0 * camera.pitch.0.sin() * camera.yaw.0.cos()),
); );
let yaw_offset = camera.yaw.0 - Rad(PI).0; let offset = camera.yaw.0 + PI/2.0;
let right_vector = Vector3::new( let pitch = PI/2.0;
(1.0 * camera.pitch.0.sin() * yaw_offset.sin()), let left_vector = Vector3::new(
(1.0 * camera.pitch.0.cos()), (1.0 * pitch.sin() * offset.sin()),
(1.0 * camera.pitch.0.sin() * yaw_offset.cos()), (1.0 * pitch.cos()),
(1.0 * pitch.sin() * offset.cos()),
); );
camera.position += view_vector * (self.amount_forward - self.amount_backward) * self.speed * dt; camera.position += view_vector * (self.amount_forward - self.amount_backward) * self.speed * dt;
camera.position += right_vector * (self.amount_right - self.amount_left) * self.speed * dt; camera.position += left_vector * (self.amount_left - self.amount_right) * self.speed * dt;
// I'm not a huge fan of this // I'm not a huge fan of this
// // Move in/out (aka. "zoom") // // Move in/out (aka. "zoom")

@ -44,13 +44,7 @@ pub struct RangeCopy<Idx> {
pub end: Idx, pub end: Idx,
} }
#[derive(Clone, Debug)]
pub struct DirectionalLight {
pub color: wgpu::Color,
pub fov: f32,
pub depth: RangeCopy<f32>,
pub target_view: Arc<TextureView>,
}
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Mesh { pub struct Mesh {

@ -2,7 +2,9 @@ use bytemuck::__core::ops::Range;
use bytemuck::{Zeroable, Pod}; use bytemuck::{Zeroable, Pod};
use cgmath::Point3; use cgmath::Point3;
use crate::render::OPENGL_TO_WGPU_MATRIX; use crate::render::OPENGL_TO_WGPU_MATRIX;
use crate::components::DirectionalLight; use std::sync::Arc;
use wgpu::TextureView;
use crate::components::RangeCopy;
#[repr(C)] #[repr(C)]
@ -17,6 +19,14 @@ unsafe impl Pod for LightRaw {}
unsafe impl Zeroable for LightRaw {} unsafe impl Zeroable for LightRaw {}
#[derive(Clone, Debug)]
pub struct DirectionalLight {
pub color: wgpu::Color,
pub fov: f32,
pub depth: RangeCopy<f32>,
pub target_view: Arc<TextureView>,
}
impl DirectionalLight { impl DirectionalLight {
pub fn to_raw(&self, pos: Point3<f32>) -> LightRaw { pub fn to_raw(&self, pos: Point3<f32>) -> LightRaw {
use cgmath::{Deg, EuclideanSpace, Matrix4, PerspectiveFov, Point3, Vector3}; use cgmath::{Deg, EuclideanSpace, Matrix4, PerspectiveFov, Point3, Vector3};

@ -131,7 +131,7 @@ fn main() {
resources.insert(LoopState { resources.insert(LoopState {
delta_time: Default::default(), delta_time: Default::default(),
start_time: Instant::now(), start_time: Instant::now(),
step_size: 0.005, step_size: 0.01666, // 60hz
}); });
@ -181,11 +181,8 @@ fn main() {
let mut current_time: f32 = elapsed_time; let mut current_time: f32 = elapsed_time;
event_loop.run(move |event, _, control_flow| { event_loop.run(move |event, _, control_flow| {
// Artificially slows the loop rate to 10 millis
// This is called after redraw events cleared
//*control_flow = ControlFlow::WaitUntil(Instant::now() + Duration::from_millis(10));
*control_flow = ControlFlow::Poll;
*control_flow = ControlFlow::Poll;
match event { match event {
event::Event::NewEvents(cause) => { event::Event::NewEvents(cause) => {
event_schedule.execute(&mut world, &mut resources); event_schedule.execute(&mut world, &mut resources);
@ -256,15 +253,30 @@ pub fn entity_loading(world: &mut World, renderer: &mut Renderer) {
yaw: Rad(-PI), yaw: Rad(-PI),
pitch: Rad(PI/2.0) pitch: Rad(PI/2.0)
}, },
Color {
r: 1.0,
g: 1.0,
b: 0.5,
a: 1.0,
},
CameraController::new(3.0, 1.0), CameraController::new(3.0, 1.0),
)); ));
let light_mesh = renderer.load_mesh_to_buffer("./resources/light.obj");
let light_entity: Entity = world.push(( let light_entity: Entity = world.push((
cgmath::Point3 { cgmath::Point3 {
x: 7.0 as f32, x: 5.0 as f32,
y: -5.0 as f32, y: 5.0 as f32,
z: 10.0 as f32, z: 5.0 as f32,
},
Color {
r: 1.0,
g: 0.0,
b: 1.0,
a: 1.0,
}, },
light_mesh.clone(),
renderer.create_light(), renderer.create_light(),
)); ));
@ -274,6 +286,7 @@ pub fn entity_loading(world: &mut World, renderer: &mut Renderer) {
y: 7.0 as f32, y: 7.0 as f32,
z: 10.0 as f32, z: 10.0 as f32,
}, },
light_mesh,
renderer.create_light(), renderer.create_light(),
)); ));
@ -297,9 +310,9 @@ pub fn entity_loading(world: &mut World, renderer: &mut Renderer) {
}, },
monkey_mesh, monkey_mesh,
Color { Color {
r: 1.0, r: 0.0,
g: 0.5, g: 1.0,
b: 0.5, b: 0.0,
a: 1.0, a: 1.0,
}, },
)); ));

@ -21,9 +21,9 @@ use winit::platform::unix::x11::ffi::Time;
use winit::window::Window; use winit::window::Window;
use crate::camera::{Camera, CameraController}; use crate::camera::{Camera, CameraController};
use crate::components::{Color, DirectionalLight, Mesh, Position, RangeCopy}; use crate::components::{Color, Mesh, Position, RangeCopy};
use crate::geometry::{create_plane, import_mesh, vertex, Vertex}; use crate::geometry::{create_plane, import_mesh, vertex, Vertex};
use crate::light::LightRaw; use crate::light::{LightRaw, DirectionalLight};
#[cfg_attr(rustfmt, rustfmt_skip)] #[cfg_attr(rustfmt, rustfmt_skip)]
#[allow(unused)] #[allow(unused)]
@ -267,8 +267,8 @@ impl Renderer {
cgmath::perspective( cgmath::perspective(
cgmath::Deg(75f32), cgmath::Deg(75f32),
self.size.width as f32 / self.size.height as f32, self.size.width as f32 / self.size.height as f32,
1.0, 0.1,
20.0, 100.0,
) )
} }
@ -340,46 +340,6 @@ impl Renderer {
} }
} }
/// I don't know why the hell this is still in here
pub fn create_plane(&self, size: f32) -> Mesh {
let vertices = [
vertex([size, -size, 0.0], [0.0, 0.0, 1.0]),
vertex([size, size, 0.0], [0.0, 0.0, 1.0]),
vertex([-size, -size, 0.0], [0.0, 0.0, 1.0]),
vertex([-size, size, 0.0], [0.0, 0.0, 1.0]),
];
let indices: &[u32] = &[0, 1, 2, 2, 1, 3];
let index_count = indices.len();
let (vertex_buf, index_buf) =
Renderer::create_buffer(&self.device, indices.to_vec(), vertices.to_vec());
let uniform_buf = Arc::new(self.device.create_buffer(&wgpu::BufferDescriptor {
label: Some("Plane Uniform Buf"),
size: mem::size_of::<EntityUniforms>() as wgpu::BufferAddress,
usage: wgpu::BufferUsage::UNIFORM | wgpu::BufferUsage::COPY_DST,
mapped_at_creation: false,
}));
let bind_group = Arc::new(self.device.create_bind_group(&wgpu::BindGroupDescriptor {
layout: &self.entity_bind_group_layout,
entries: &[wgpu::BindGroupEntry {
binding: 0,
resource: wgpu::BindingResource::Buffer(uniform_buf.slice(..)),
}],
label: Some("Plane Bind Group"),
}));
Mesh {
index_buffer: index_buf,
index_count: index_count,
vertex_buffer: vertex_buf,
uniform_buffer: uniform_buf,
bind_group: bind_group,
}
}
pub fn load_mesh_to_buffer(&self, filepath: &str) -> Mesh { pub fn load_mesh_to_buffer(&self, filepath: &str) -> Mesh {
let (vertices, indices) = import_mesh(filepath); let (vertices, indices) = import_mesh(filepath);
let index_count = indices.len(); let index_count = indices.len();
@ -411,7 +371,6 @@ impl Renderer {
} }
pub fn init(window: &Window) -> Renderer { pub fn init(window: &Window) -> Renderer {
log::info!("Initializing the surface...");
// Grab the GPU instance, and query its features // Grab the GPU instance, and query its features
let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY); let instance = wgpu::Instance::new(wgpu::BackendBit::PRIMARY);
@ -428,11 +387,9 @@ impl Renderer {
}); });
let adapter = futures::executor::block_on(adapter).unwrap(); let adapter = futures::executor::block_on(adapter).unwrap();
let optional_features = Renderer::optional_features(); let optional_features = Renderer::optional_features();
let required_features = Renderer::required_features(); let required_features = Renderer::required_features();
let adapter_features = adapter.features(); let adapter_features = adapter.features();
let needed_limits = wgpu::Limits::default(); //Renderer::required_limits(); let needed_limits = wgpu::Limits::default(); //Renderer::required_limits();
// Maybe for debug tracing??? // Maybe for debug tracing???
@ -453,39 +410,6 @@ impl Renderer {
let queue = Arc::new(queue); let queue = Arc::new(queue);
let device = Arc::new(device); let device = Arc::new(device);
// This is some gross-ass web shit
/*#[cfg(target_arch = "wasm32")]
let spawner = {
use futures::{future::LocalFutureObj, task::SpawnError};
use winit::platform::web::WindowExtWebSys;
struct WebSpawner {}
impl LocalSpawn for WebSpawner {
fn spawn_local_obj(
&self,
future: LocalFutureObj<'static, ()>,
) -> Result<(), SpawnError> {
Ok(wasm_bindgen_futures::spawn_local(future))
}
}
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
// On wasm, append the canvas to the document body
web_sys::window()
.and_then(|win| win.document())
.and_then(|doc| doc.body())
.and_then(|body| {
body.append_child(&web_sys::Element::from(window.canvas()))
.ok()
})
.expect("couldn't append canvas to document body");
WebSpawner {}
};*/
log::info!("Done doing the loading part...");
let mut sc_desc = (wgpu::SwapChainDescriptor { let mut sc_desc = (wgpu::SwapChainDescriptor {
// Allows a texture to be a output attachment of a renderpass. // Allows a texture to be a output attachment of a renderpass.
usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT, usage: wgpu::TextureUsage::OUTPUT_ATTACHMENT,

Loading…
Cancel
Save