Raycast遇到错误的对象/块

时间:2018-02-20 17:24:25

标签: java raycasting

几天前,我开始用Java进行类似Minecraft的游戏。但是当我试图获得玩家正在看的块时我遇到了问题:光线投射总是遇到错误的阻挡。

这是我的代码: 我首先从相机/播放器的偏航/俯仰变量创建方向向量:

Vector3 direction = convert(player.getYaw(), player.getPitch());
Vector3D origin = new Vector3D(player.getX(), player.getY(), player.getZ());

要将偏航/俯仰转换为方向向量,我使用此方法:convert(float yaw,float pitch)

    double x = Math.cos(Math.toRadians(pitch)) * Math.cos(Math.toRadians(yaw));
    double y = Math.sin(Math.toRadians(pitch));
    double z = Math.cos(Math.toRadians(pitch)) * Math.sin(Math.toRadians(yaw));

    return new Vector3D(x, y, z).normalize();

这是我的光线投射代码

// The pointer resembles the current position of the raycast
    Vector3D pointer = start.clone();

    int range = 16;
    for(int i = 0; i < range; i++) {

        // Add the direction vector to the pointer
        pointer.add(direction);

        Block block = world.getBlock((int)pointer.getX(), (int)pointer.getY(), (int)pointer.getZ());
        if(block != null) {

            hitBlock = block;
            break;

        }

    }

以下是显示错误选择的屏幕截图:

enter image description here

我还尝试获取所有近块的列表,然后测试光线是否与立方体的边界框相交。但是这导致选择了一些块,因为光线投射击中了相机甚至看不到的块的面。

0 个答案:

没有答案