gpt4 book ai didi

java - 将 2D 屏幕坐标取消投影到 3D 世界坐标

转载 作者:行者123 更新时间:2023-12-01 10:34:02 28 4
gpt4 key购买 nike

我正在做一些投影,投影到 2D 后我想要进行相反的操作,不投影到 3D。我唯一困惑的一步是从 NDC 到 HDC 时,更具体地说如何进行透视划分的反向?目前,当做相反的事情时,我最终得到 -1 w 值,这在除法或乘法时不会有太大作用,或者可能还有我正在监督的其他东西。这是我目前拥有的代码:

    private Vector3f projectTo3D(Matrix4f projection, Matrix4f view, Matrix4f world, Vector3f vertex) {

Matrix4f.invert(projection, projection);
Matrix4f.invert(view, view);
Matrix4f.invert(world, world);

System.out.println("projectTo3D - Screen Coordinate: " + vertex.toString());

....

System.out.println("NDC: " + x + ", " + y + ", " + z);
final Vector4f HDC = new Vector4f(x, y, z, -1f);
HDC.x = HDC.x / HDC.w;
HDC.y = HDC.y / HDC.w;
HDC.z = HDC.z / HDC.w;

System.out.println("HDC before transform: " + HDC.toString());
Matrix4f.transform(worldProjectionView, HDC, HDC);
System.out.println("HDC after transform: " + HDC.toString());

final Vector3f worldCoordinates = new Vector3f(HDC.x, HDC.y, HDC.z);
System.out.println("World coordinate: " + worldCoordinates.toString());
return worldCoordinates;
}

projectTo2D - World Coordinate: Vector3f[-50.0, -50.0, 0.0]

HDC: Vector4f: -195.05373 -44.30973 -529.6105 -529.6105

NDC: Vector3f[0.3682966, 0.08366475, 0.0]

Screen coordinate: 547.31866, 325.09943, 0.0


projectTo3D - Screen Coordinate: Vector3f[547.31866, 325.09943, 0.0]

NDC: 0.36829662, 0.083664775, -1.0

HDC before transform: Vector4f: -0.36829662 -0.083664775 1.0 -1.0

HDC after transform: Vector4f: -292.38623 405.26837 -291.50772 1.0

World coordinate: Vector3f[-292.38623, 405.26837, -291.50772]

我正在遵循这个图表:

enter image description here

最佳答案

这里实际上有一个线性代数问题,不幸的是这是一个无法解决的问题。当您将 3D 坐标空间投影到 2D 空间(这是模型->视口(viewport)变换的工作)时,您会在此过程中丢失一个维度,并且反向问题会受到约束不足。

我的意思是,如果 2D 空间中只有一个 vector (例如屏幕中的一个点),则有无数个 3D vector 可以投影到同一个 2D vector 上,形成一个新的 3D vector 。一维 vector 空间。由于投影不是仿射(线性)运算,这意味着您的一维空间不是直线;相反,3D 空间中的一条曲线。

关于java - 将 2D 屏幕坐标取消投影到 3D 世界坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34911003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com