了解如何在 2D 中渲染三角形(或多边形)

Jay*_*son 3 bevy

在许多示例中,突破仅使用矩形,有加载精灵的示例,有加载 3D 网格的示例。在二维中,我想绘制一个三角形(或其他多边形),但我无法通过文档弄清楚它。

小智 6

不确定这是否仍然相关,但今天我在这里遇到了同样的问题,那就是我如何绘制简单的三角形

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
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个三角形网格。对我来说,棘手的部分是弄清楚默认情况下三角形是透明绘制的,并且应该为顶点设置阿尔法值。稍后您可以在系统中使用此网格生成函数,如下所示:

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()
});
Run Code Online (Sandbox Code Playgroud)

}