Java 如何将屏幕上的三维位置转换为二维点?

Java 如何将屏幕上的三维位置转换为二维点?,java,3d,2d,lwjgl,Java,3d,2d,Lwjgl,我试图在3D环境中渲染2D文本,但要做到这一点,我需要能够将一组3D坐标转换为屏幕上的2D点。我的相机有一个视图投影矩阵、一个视野和一个3D空间中的位置。我试图渲染的文本在屏幕上有一个2D点 以下是我到目前为止的情况: public final Vector2f get2DPointFrom3DPosition(Vector3f position) {//position is the point in 3D space that I'm trying to render the text at

我试图在3D环境中渲染2D文本,但要做到这一点,我需要能够将一组3D坐标转换为屏幕上的2D点。我的相机有一个视图投影矩阵、一个视野和一个3D空间中的位置。我试图渲染的文本在屏幕上有一个2D点

以下是我到目前为止的情况:

public final Vector2f get2DPointFrom3DPosition(Vector3f position) {//position is the point in 3D space that I'm trying to render the text at
    final Vector3f camPos = this.getTransform().getPos();//where Vector3f == (x, y, z), and is a 3D position in space
    final Matrix4f viewProjection = this.getViewProjection();//where Matrix4f == float[][]
    final double fov = this.getFieldOfView();//usually 70.0f
    float X;
    float Y;
    //complicated math that I can't find with google or figure out
    return new Vector2f(X, Y);//where vector2f is a pixel position on the screen
}
如果我错过了一个类似的问题,或者我对任何事情都不清楚,我会提前道歉。我确实找到了这个问题,但它不是java,我找不到基本的数学:


这一计算至少可以为您确定正确的方向。

您可以试试。这是关于将2D向量转换为3D坐标的,但步骤可以很容易地颠倒。谢谢,我会尝试一下。嗯,也许我遗漏了一些明显的东西,但我不知道如何颠倒这个过程,而且我在任何地方都看不到矩阵。。。brain.exe已停止工作。LOL你在使用哪个数学库?顶部的图表显示了如何从一个空间到另一个空间-你必须按照逆时针方向的箭头。您不需要模型矩阵(您已经拥有三维位置),
viewProjection
可能包含视图和投影矩阵。是否必须进行透视分割取决于您使用的数学库。然后,转换到视口空间应该很简单。
2D_X = 3D_X / Z
2D_Y = 3D_Y / Z