diff --git a/assets/images/cubemap.blend b/assets/images/cubemap.blend index 1fe59f7..5e91595 100644 --- a/assets/images/cubemap.blend +++ b/assets/images/cubemap.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85fde6c11c9257c2373b6ed009c3885eb38e50307f8a8ad9b47a9e3a7327edc6 -size 963672 +oid sha256:409eea0e424c3114755d6d7689c87451403ab082f2456e5c29bdfaf721253956 +size 1172876 diff --git a/assets/images/cubemap.blend1 b/assets/images/cubemap.blend1 index d676056..c07eb70 100644 --- a/assets/images/cubemap.blend1 +++ b/assets/images/cubemap.blend1 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b4af0bacd70583a374dc6679eb6795b33d88cb15c41bd41efbeb6389af64e44 -size 983020 +oid sha256:4acea8165cfd68b5fd5873ab11ccc08fe0305bf8b63996ed4712866c82402f54 +size 1172876 diff --git a/assets/images/cubemap.png b/assets/images/cubemap.png index 5039364..8fc3a3b 100644 --- a/assets/images/cubemap.png +++ b/assets/images/cubemap.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:611d52e14af81d9ddfb5a5dd7df141043177b53e1a04e35d0c161a26a8db5a00 -size 298782 +oid sha256:c9db369a458c0053d60f5a80980fc62561c44a5992f0b670de5df9ef691ed88d +size 298519 diff --git a/assets/images/skybox.png b/assets/images/skybox.png new file mode 100644 index 0000000..bb37eb7 --- /dev/null +++ b/assets/images/skybox.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c8fbc5c260474c16268a7100d587583400977b125c073b3e00043fd6139acbe +size 298394 diff --git a/assets/images/skybox_negx.png b/assets/images/skybox_negx.png index a3d5b52..1777bc6 100644 --- a/assets/images/skybox_negx.png +++ b/assets/images/skybox_negx.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2713a42c96c12a9a493cf6c22382506abc3ae20c9e8e7158e6a03a36bdc50b9d -size 56271 +oid sha256:03008cbcd444eee8b37bc3e384d76377445bf73b7e3cadf28aa9164546246446 +size 52071 diff --git a/assets/images/skybox_negy.png b/assets/images/skybox_negy.png index 6ddd452..5fc2df9 100644 --- a/assets/images/skybox_negy.png +++ b/assets/images/skybox_negy.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:839ca79ede386fa05aef3ea15c1eeb1551231f1da0ed86f5073a866249c1929f -size 65329 +oid sha256:1bb64bd200e2dd7d6ebc511e62b08b51a353bbe7a046624ddccdd0b16036a7f3 +size 55577 diff --git a/assets/images/skybox_negz.png b/assets/images/skybox_negz.png index 131d191..35695de 100644 --- a/assets/images/skybox_negz.png +++ b/assets/images/skybox_negz.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c20d30e6e01c4a21f600392ceee5f457a4424b0f40c82f1918e225ce39ad81d4 -size 56163 +oid sha256:dfb9bbd41eaf3941ab856e965fbaa24033adfa276f315153ff9069a2ef0a148a +size 64345 diff --git a/assets/images/skybox_posx.png b/assets/images/skybox_posx.png index 4dfe44b..7b0d977 100644 --- a/assets/images/skybox_posx.png +++ b/assets/images/skybox_posx.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e86f11a90be762e227b1d5210654e17e5daf68536a8c438b8eea389db48e536f -size 18713 +oid sha256:62c30a5bb1fd5bebe1d538c0397e159e1e2fc43e80b1d79db4e2d91f87fc69de +size 33095 diff --git a/assets/images/skybox_posy.png b/assets/images/skybox_posy.png index af01c41..10839e3 100644 --- a/assets/images/skybox_posy.png +++ b/assets/images/skybox_posy.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:556c480f44b11ad723e78c640d0d1f84443bf1cc6a598521ff7a23a1a8a3e88f -size 24263 +oid sha256:636fb18d76587396bab83d16234d6a0ead3ead0805703bc6f36ff1e5f4e6197a +size 37681 diff --git a/assets/images/skybox_posz.png b/assets/images/skybox_posz.png index 5270036..ee10a66 100644 --- a/assets/images/skybox_posz.png +++ b/assets/images/skybox_posz.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c9764a04df2189fd05b5d5c5af6a01b730642413790b1d99867c3183d375319 -size 43118 +oid sha256:6e9c2f78e40fc24dd2e41d716c667b327788cf6764759c01e76230ca75c23ace +size 36443 diff --git a/examples/skybox.rs b/examples/skybox.rs new file mode 100644 index 0000000..bd9a82d --- /dev/null +++ b/examples/skybox.rs @@ -0,0 +1,70 @@ +use bevy::{ + core_pipeline::Skybox, + input::mouse::MouseMotion, + prelude::*, + render::render_resource::{TextureViewDescriptor, TextureViewDimension}, +}; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, init) + .add_systems(Update, (add_skybox, move_camera)) + .run() +} + +fn init(mut commands: Commands) { + commands.spawn(Camera3dBundle { + camera: Camera { + is_active: true, + ..default() + }, + ..default() + }); +} + +fn add_skybox( + server: Res, + query: Query>, + mut images: ResMut>, + mut commands: Commands, + mut handle: Local>>, + mut loaded: Local, +) { + if !(*loaded) { + if let Some(handle) = (*handle).clone() { + if let Some(image) = images.get_mut(&handle) { + info!("Loaded skybox image"); + // NOTE: PNGs do not have any metadata that could indicate they contain a cubemap texture, + // so they appear as one texture. The following code reconfigures the texture as necessary. + if image.texture_descriptor.array_layer_count() == 1 { + image.reinterpret_stacked_2d_as_array( + image.texture_descriptor.size.height / image.texture_descriptor.size.width, + ); + image.texture_view_descriptor = Some(TextureViewDescriptor { + dimension: Some(TextureViewDimension::Cube), + ..default() + }); + } + query.iter().for_each(|entity| { + commands.entity(entity).insert(Skybox(handle.clone())); + }); + *loaded = true; + } + } else { + *handle = Some(server.load("images/skybox.png")); + } + } +} + +fn move_camera( + mut events: EventReader, + mut camera: Query<&mut Transform, With>, +) { + events.iter().for_each(|MouseMotion { delta }| { + camera.iter_mut().for_each(|mut t| { + t.rotate_local_y(-delta.x / 256.0); + t.rotate_local_x(-delta.y / 256.0); + }) + }); +} diff --git a/src/display3d.rs b/src/display3d.rs index db46fc9..e13417f 100644 --- a/src/display3d.rs +++ b/src/display3d.rs @@ -60,7 +60,7 @@ struct AssetsMap { fn load_assets(server: Res, mut commands: Commands) { commands.insert_resource(AssetsMap { models: server.load("models/Martian Chess.glb"), - skybox: server.load("images/cubemap.png"), + skybox: server.load("images/skybox.png"), }); } @@ -76,10 +76,6 @@ fn initialize(mut commands: Commands, board: Option>, assets: R hdr: true, ..default() }, - projection: Projection::Orthographic(OrthographicProjection { - scale: 0.02, - ..default() - }), transform: Transform::from_xyz(0.0, 20.0, 10.0).looking_at(Vec3::ZERO, Vec3::Y), ..default() },