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 не поддерживается. Это рассматривается, но еще не сделано.