use bevy::{prelude::*, math::bool, render::primitives::Frustum}; use rand::prelude::*; use bevy::render::primitives::Plane; // pub struct BuildScenePlugin; // impl Plugin for BuildScenePlugin { // fn build(&self, app: &mut App) { // app.add_startup_system(build_scene) // actual scene // .add_system(print_positions); // debugging // } // } #[derive(Component)] pub struct ProjectionScreen { bottom_left: Vec3, bottom_right: Vec3, top_left: Vec3, top_right: Vec3, dir_right: Vec3, dir_up: Vec3, dir_normal: Vec3, matrix: Mat4 } fn generalized_projection_stereo(eyePos : Vec3) { } fn generalized_projection ( projectionScreen: ProjectionScreen, eyePos: Vec3, mut camera: Camera3dBundle, clampNearPlane: bool, ) { let pa = projectionScreen.bottom_left; let pb = projectionScreen.bottom_right; let pc = projectionScreen.top_left; let pd = projectionScreen.top_right; let vu = projectionScreen.dir_up; let vr = projectionScreen.dir_right; let vn = projectionScreen.dir_normal; // let m = projectionScreen.matrix; //let m = Mat4::from_cols(vu., y_axis, z_axis, w_axis) let va = pa - eyePos; let vb = pb - eyePos; let vc = pc - eyePos; let vd = pd - eyePos; let viewDir = eyePos + va + vb + vc + vd; let d = -va.dot(vn); if clampNearPlane { _ = 33; // camera.frustum.planes[4]. // should be near } } pub fn build_scene( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { // plane commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Plane { size: 4.0 })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..default() }); // cube commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..default() }); // light commands.spawn(PointLightBundle { point_light: PointLight { intensity: 1500.0, shadows_enabled: true, ..default() }, transform: Transform::from_xyz(4.0, 1.0, -4.0), ..default() }); }