Change the glTF loader to use Camera3dBundle (#7890)

# Objective

- Fixes #7889.

## Solution

- Change the glTF loader to insert a `Camera3dBundle` instead of a manually constructed bundle. This might prevent future issues when new components are required for a 3D Camera to work correctly.
- Register the `ColorGrading` type because `bevy_scene` was complaining about it.
This commit is contained in:
Edgar Geier 2023-03-04 12:05:27 +00:00
parent 2a7000a738
commit 30b29deaa9
2 changed files with 11 additions and 18 deletions

View File

@ -3,7 +3,7 @@ use bevy_asset::{
AssetIoError, AssetLoader, AssetPath, BoxedFuture, Handle, LoadContext, LoadedAsset, AssetIoError, AssetLoader, AssetPath, BoxedFuture, Handle, LoadContext, LoadedAsset,
}; };
use bevy_core::Name; use bevy_core::Name;
use bevy_core_pipeline::prelude::Camera3d; use bevy_core_pipeline::prelude::Camera3dBundle;
use bevy_ecs::{entity::Entity, prelude::FromWorld, world::World}; use bevy_ecs::{entity::Entity, prelude::FromWorld, world::World};
use bevy_hierarchy::{BuildWorldChildren, WorldChildBuilder}; use bevy_hierarchy::{BuildWorldChildren, WorldChildBuilder};
use bevy_log::warn; use bevy_log::warn;
@ -13,21 +13,17 @@ use bevy_pbr::{
SpotLight, SpotLightBundle, StandardMaterial, SpotLight, SpotLightBundle, StandardMaterial,
}; };
use bevy_render::{ use bevy_render::{
camera::{ camera::{Camera, OrthographicProjection, PerspectiveProjection, Projection, ScalingMode},
Camera, CameraRenderGraph, OrthographicProjection, PerspectiveProjection, Projection,
ScalingMode,
},
color::Color, color::Color,
mesh::{ mesh::{
skinning::{SkinnedMesh, SkinnedMeshInverseBindposes}, skinning::{SkinnedMesh, SkinnedMeshInverseBindposes},
Indices, Mesh, VertexAttributeValues, Indices, Mesh, VertexAttributeValues,
}, },
prelude::SpatialBundle, prelude::SpatialBundle,
primitives::{Aabb, Frustum}, primitives::Aabb,
render_resource::{AddressMode, Face, FilterMode, PrimitiveTopology, SamplerDescriptor}, render_resource::{AddressMode, Face, FilterMode, PrimitiveTopology, SamplerDescriptor},
renderer::RenderDevice, renderer::RenderDevice,
texture::{CompressedImageFormats, Image, ImageSampler, ImageType, TextureError}, texture::{CompressedImageFormats, Image, ImageSampler, ImageType, TextureError},
view::VisibleEntities,
}; };
use bevy_scene::Scene; use bevy_scene::Scene;
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
@ -714,9 +710,8 @@ fn load_node(
) -> Result<(), GltfError> { ) -> Result<(), GltfError> {
let transform = gltf_node.transform(); let transform = gltf_node.transform();
let mut gltf_error = None; let mut gltf_error = None;
let mut node = world_builder.spawn(SpatialBundle::from(Transform::from_matrix( let transform = Transform::from_matrix(Mat4::from_cols_array_2d(&transform.matrix()));
Mat4::from_cols_array_2d(&transform.matrix()), let mut node = world_builder.spawn(SpatialBundle::from(transform));
)));
node.insert(node_name(gltf_node)); node.insert(node_name(gltf_node));
@ -756,18 +751,15 @@ fn load_node(
Projection::Perspective(perspective_projection) Projection::Perspective(perspective_projection)
} }
}; };
node.insert(Camera3dBundle {
node.insert((
projection, projection,
Camera { transform,
camera: Camera {
is_active: !*active_camera_found, is_active: !*active_camera_found,
..Default::default() ..Default::default()
}, },
VisibleEntities::default(), ..Default::default()
Frustum::default(), });
Camera3d::default(),
CameraRenderGraph::new(bevy_core_pipeline::core_3d::graph::NAME),
));
*active_camera_found = true; *active_camera_found = true;
} }

View File

@ -46,6 +46,7 @@ impl Plugin for ViewPlugin {
.register_type::<RenderLayers>() .register_type::<RenderLayers>()
.register_type::<Visibility>() .register_type::<Visibility>()
.register_type::<VisibleEntities>() .register_type::<VisibleEntities>()
.register_type::<ColorGrading>()
.init_resource::<Msaa>() .init_resource::<Msaa>()
// NOTE: windows.is_changed() handles cases where a window was resized // NOTE: windows.is_changed() handles cases where a window was resized
.add_plugin(ExtractResourcePlugin::<Msaa>::default()) .add_plugin(ExtractResourcePlugin::<Msaa>::default())