mirror of
https://github.com/bevyengine/bevy
synced 2024-11-21 20:23:28 +00:00
Cosmetic tweaks to query_gltf_primitives
(#16102)
# Objective This example is really confusing to look at and tell at a glance whether it's broken or not. It's displaying a strange shape -- a cube with two vertices stretched in a couple dimensions at an odd angle, and doing its vertex position modification in a way where the intent isn't obvious. ## Solution - Change the gltf geometry so that the object is a recognizable regular shape - Change the vertex modification so that the entire cube top is being "lifted" from the cube - Adjust colors, lighting, and camera location so we can see what's going on - Also remove some irrelevant shadow and environment map setup ## Before ![Image](https://github.com/user-attachments/assets/e5dd5075-0480-49d4-b1ed-cf1fe6106f3c) ## After <img width="1280" alt="image" src="https://github.com/user-attachments/assets/59cab60d-efbc-47c3-8688-e4544b462421">
This commit is contained in:
parent
7451900e71
commit
3fc2bd71ea
2 changed files with 17 additions and 44 deletions
Binary file not shown.
|
@ -3,16 +3,10 @@
|
||||||
|
|
||||||
use std::f32::consts::PI;
|
use std::f32::consts::PI;
|
||||||
|
|
||||||
use bevy::{
|
use bevy::{gltf::GltfMaterialName, prelude::*, render::mesh::VertexAttributeValues};
|
||||||
gltf::GltfMaterialName,
|
|
||||||
pbr::{CascadeShadowConfigBuilder, DirectionalLightShadowMap},
|
|
||||||
prelude::*,
|
|
||||||
render::mesh::VertexAttributeValues,
|
|
||||||
};
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.insert_resource(DirectionalLightShadowMap { size: 4096 })
|
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
.add_systems(Startup, setup)
|
.add_systems(Startup, setup)
|
||||||
.add_systems(Update, find_top_material_and_mesh)
|
.add_systems(Update, find_top_material_and_mesh)
|
||||||
|
@ -36,7 +30,7 @@ fn find_top_material_and_mesh(
|
||||||
if let Color::Hsla(ref mut hsla) = material.base_color {
|
if let Color::Hsla(ref mut hsla) = material.base_color {
|
||||||
*hsla = hsla.rotate_hue(time.delta_secs() * 100.0);
|
*hsla = hsla.rotate_hue(time.delta_secs() * 100.0);
|
||||||
} else {
|
} else {
|
||||||
material.base_color = Color::from(Hsla::hsl(0.0, 0.8, 0.5));
|
material.base_color = Color::from(Hsla::hsl(0.0, 0.9, 0.7));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,10 +38,11 @@ fn find_top_material_and_mesh(
|
||||||
if let Some(VertexAttributeValues::Float32x3(positions)) =
|
if let Some(VertexAttributeValues::Float32x3(positions)) =
|
||||||
mesh.attribute_mut(Mesh::ATTRIBUTE_POSITION)
|
mesh.attribute_mut(Mesh::ATTRIBUTE_POSITION)
|
||||||
{
|
{
|
||||||
positions[0] = (
|
for position in positions {
|
||||||
ops::sin(2.0 * PI * time.elapsed_secs()),
|
*position = (
|
||||||
positions[0][1],
|
position[0],
|
||||||
positions[0][2],
|
1.5 + 0.5 * ops::sin(time.elapsed_secs() / 2.0),
|
||||||
|
position[2],
|
||||||
)
|
)
|
||||||
.into();
|
.into();
|
||||||
}
|
}
|
||||||
|
@ -55,42 +50,20 @@ fn find_top_material_and_mesh(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
commands.spawn((
|
commands.spawn((
|
||||||
Camera3d::default(),
|
Camera3d::default(),
|
||||||
Transform::from_xyz(0.6, 1.6, 11.3).looking_at(Vec3::new(0.0, 0.0, 3.0), Vec3::Y),
|
Transform::from_xyz(4.0, 4.0, 12.0).looking_at(Vec3::new(0.0, 0.0, 0.5), Vec3::Y),
|
||||||
EnvironmentMapLight {
|
|
||||||
diffuse_map: asset_server.load("environment_maps/pisa_diffuse_rgb9e5_zstd.ktx2"),
|
|
||||||
specular_map: asset_server.load("environment_maps/pisa_specular_rgb9e5_zstd.ktx2"),
|
|
||||||
intensity: 500.0,
|
|
||||||
rotation: Quat::IDENTITY,
|
|
||||||
},
|
|
||||||
));
|
));
|
||||||
|
|
||||||
commands.spawn((
|
commands.spawn((
|
||||||
DirectionalLight {
|
Transform::from_rotation(Quat::from_euler(EulerRot::ZYX, 0.0, 1.0, -PI / 4.)),
|
||||||
shadows_enabled: true,
|
DirectionalLight::default(),
|
||||||
..default()
|
|
||||||
},
|
|
||||||
// This is a relatively small scene, so use tighter shadow
|
|
||||||
// cascade bounds than the default for better quality.
|
|
||||||
// We also adjusted the shadow map to be larger since we're
|
|
||||||
// only using a single cascade.
|
|
||||||
CascadeShadowConfigBuilder {
|
|
||||||
num_cascades: 1,
|
|
||||||
maximum_distance: 1.6,
|
|
||||||
..default()
|
|
||||||
}
|
|
||||||
.build(),
|
|
||||||
));
|
));
|
||||||
commands.spawn((
|
|
||||||
SceneRoot(asset_server.load(
|
commands.spawn(SceneRoot(asset_server.load(
|
||||||
GltfAssetLabel::Scene(0).from_asset("models/GltfPrimitives/gltf_primitives.glb"),
|
GltfAssetLabel::Scene(0).from_asset("models/GltfPrimitives/gltf_primitives.glb"),
|
||||||
)),
|
)));
|
||||||
Transform {
|
|
||||||
rotation: Quat::from_rotation_y(-90.0 / 180.0 * PI),
|
|
||||||
..default()
|
|
||||||
},
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue