In addition to UVSphere, another sphere is Icosphere.
Similar to UVSphere, we initialize an Icosphere and set its radius.
commands.spawn(PbrBundle {
mesh: meshes
.add(
Icosphere {
radius: 0.5,
..default()
}
.try_into()
.unwrap(),
)
.into(),
..default()
});
The difference between the two spheres is that, in Icosphere, we have to use try_into() and unwrap() instead of into(). An error might appear if there are too many subdivisions for an Icosphere, say more than 80.
We set our camera position to (0, 0, 3)
and make it looking at the origin.
The full code is as follows:
use bevy::{
app::{App, Startup},
asset::Assets,
core_pipeline::core_3d::Camera3dBundle,
ecs::system::{Commands, ResMut},
math::Vec3,
pbr::{PbrBundle, PointLightBundle, StandardMaterial},
render::mesh::{shape::Icosphere, Mesh},
transform::components::Transform,
utils::default,
DefaultPlugins,
};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.run();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
commands.spawn(Camera3dBundle {
transform: Transform::from_xyz(0., 0., 3.).looking_at(Vec3::ZERO, Vec3::Y),
..default()
});
commands.spawn(PbrBundle {
mesh: meshes
.add(
Icosphere {
radius: 0.5,
..default()
}
.try_into()
.unwrap(),
)
.into(),
material: materials.add(StandardMaterial::default()).into(),
..default()
});
commands.spawn(PointLightBundle {
transform: Transform::from_xyz(2., 2., 1.),
..default()
});
}
Result:
➡️ Next: Cylinder
📘 Back: Table of contents