Bevy Как отрендерить треугольник (или многоугольник) в 2D

В приведенных примерах breakout использует только прямоугольники, есть примеры загрузки спрайтов, есть пример загрузки трехмерной сетки. В 2d я хотел бы нарисовать треугольник (или другие многоугольники), но я не смог понять это через документацию.

2 ответа

Не уверен, что это все еще актуально, но сегодня у меня была такая же проблема, как я смог нарисовать простой треугольник.

      fn create_triangle() -> Mesh {
    let mut mesh = Mesh::new(PrimitiveTopology::TriangleList);
    mesh.set_attribute(
        Mesh::ATTRIBUTE_POSITION,
        vec![[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0]],
    );
    mesh.set_attribute(Mesh::ATTRIBUTE_COLOR, vec![[0.0, 0.0, 0.0, 1.0]; 3]);
    mesh.set_indices(Some(Indices::U32(vec![0, 1, 2])));
    mesh
}

Это создаст треугольную сетку. Что касается меня, то сложно было понять, что по умолчанию треугольник рисуется прозрачным, а для вершин должно быть установлено значение альфа. Позже вы можете использовать эту функцию создания сетки в своей системе следующим образом:

      fn setup(
    mut commands: Commands,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<ColorMaterial>>
) {
    commands.spawn_bundle(OrthographicCameraBundle::new_2d());
    commands.spawn_bundle(MaterialMesh2dBundle {
    mesh: meshes.add(create_triangle()).into(),
    transform: Transform::default().with_scale(Vec3::splat(128.)),
    material: materials.add(ColorMaterial::from(Color::PURPLE)),
    ..Default::default()
});

}

В настоящее время "рисование" в 2D не поддерживается. Это рассматривается, но еще не сделано.

Другие вопросы по тегам