0

使用 Bevy,我制作了一个 3d 迷宫,但是当我尝试在迷宫中导航时,相机可以看到墙壁。顺着走廊往下看,前面的墙会出现,但随着靠近,它就被切断了,我可以看到另一条走廊。

我正在使用Box精灵作为墙壁:

commands
    .spawn(PbrBundle {
        mesh: meshes.add(Mesh::from(shape::Box::new(1.0, 1.0, 0.1))),
        material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
        transform: Transform::from_translation(Vec3::new(x, 0.5, y+0.5)),
        ..Default::default()
    });

我的相机是这样添加的:

commands
    .spawn(Camera3dBundle {
        transform: Transform::from_translation(Vec3::new(-2.0, 0.5, 0.0))
            .looking_at(Vec3::new(0.0, 0.5, 0.0), Vec3::unit_y()),
        ..Default::default()
    })

我需要对透视图做些什么来防止它看穿离它太近的物体吗?理想情况下,它永远不会看穿物体。

4

1 回答 1

1

原来我的墙正好间隔 1 个单位,默认近场视角是 1.0。将相机上的透视参数减小near到 0.01 可防止在离墙壁太近时看穿墙壁。

在 main.rs 中:

use bevy_render::camera::PerspectiveProjection;

commands
    .spawn(Camera3dBundle {
        transform: Transform::from_translation(Vec3::new(-2.0, 0.5, 0.0))
            .looking_at(Vec3::new(0.0, 0.5, 0.0), Vec3::unit_y()),
        perspective_projection: PerspectiveProjection {
            near: 0.01,
            ..Default::default()
        },
        ..Default::default()
    })

在 cargo.toml 中:

[dependencies]
bevy_render = "0.4"
于 2021-01-02T09:56:30.513 回答