将 3D 点投影到 2D 点会使事情发生反转

发布于 2024-11-10 15:56:41 字数 683 浏览 0 评论 0原文

似乎相机后面的所有东西都倒过来了或者什么的: 当前屏幕截图

这是原始模型: 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
    };
}

It seems everything in back of the camera get's inverted back or something:
current screenshot

This is the original model:
original model

So the camera is in the right opening of the "frame".

Here's the depth calculation (I think the problem is here):

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

Does someone know this problem?

EDIT: I have the answer here:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月棠 2024-11-17 15:56:41

当点具有 z <= 0 时,这也发生在我身上,因为这样投影公式无效。只是不要以点 z <= 0 的方式旋转对象。

它是倒置的,因为公式 y = 1 / x 是关于原点点对称的。因此,对于x <= 0,则y 变为-y。例如,1 / 2 = 1 / 2,但是 1 / -2 = - 1 / 2

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

This also happened to me when points have a z <= 0, because then the projection formulas are invalid. Just don't rotate your object in such a way that points get z <= 0.

It's inverted because the formula y = 1 / x is point symmetric around the origin. So for x <= 0 then y becomes -y. E.g., 1 / 2 = 1 / 2, but 1 / -2 = - 1 / 2.

To come to the point, I'd say you'd be best off altering your engine so as to map values z <= 0 to z = 1 (or something smaller). Though this is a cheap trick, of course. There are probably more meaningful techniques for this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文