Skip to content

Latest commit

 

History

History
89 lines (74 loc) · 2.94 KB

icosphere.md

File metadata and controls

89 lines (74 loc) · 2.94 KB

Icosphere

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:

Icosphere

➡️ Next: Cylinder

📘 Back: Table of contents