将3D点投影到2D点会使事物反转

时间:2011-05-30 17:27:20

标签: javascript 3d projection html5-canvas

相机后面的所有东西似乎都倒了回来或者其他东西: current screenshot

这是原始型号: original model

因此相机位于“框架”的右侧开口。

这是深度计算(我认为问题出在这里):

function 3dto2d(x, y, z) {
    var scale = cameradistance / (cameradistance - z);
    return {
        'x' : x * scale,
        'y' : y * scale
    };
}

有人知道这个问题吗?

编辑:我的答案在这里:

function 3dto2d(x, y, z) {
    var scale = cameradistance / (cameradistance - (z >= cameradistance ? cameradistance - 1 : z));
    return {
        'x' : x * scale,
        'y' : y * scale
    };
}

1 个答案:

答案 0 :(得分:4)

当点数为z <= 0时,这也发生在我身上,因为投影公式无效。只是不要以点数z <= 0

的方式旋转对象

它被反转,因为公式y = 1 / x在原点周围是点对称的。因此,对于x <= 0y变为-y。例如,1 / 2 = 1 / 2,但1 / -2 = - 1 / 2

要说明一点,我会说你最好改变你的引擎,以便将值z <= 0映射到z = 1(或更小的东西)。当然,这是一个廉价的伎俩。可能有更有意义的技术。