如果我在屏幕X / Y上的显示器上选择一个点,我如何根据投影和视图矩阵获得3D空间中的点?
例如,我想将一个物体置于深度,并将其放置在屏幕坐标中的10,10处。因此,当我更新其世界矩阵时,它将在屏幕上以10,10呈现。
我认为这是相当简单的,因为我有我的相机矩阵,但我不确定如何“逆转”正常过程。
DirectXTk XMMath是最好的,但我无疑可以从任何线性代数系统(OpenGL,D3DX等)中解决它。
答案 0 :(得分:0)
我实际上要做的是在背部剪裁平面上找到一个随机点,我可以在那里开始一个物体,然后沿着投影线直接向相机漂移。所以我想继续在深空中挑选仍然在我视野内的点(在我的情况下没有创造出一些点)并在那时启动外星船(或其他)。
正如我的评论中所讨论的,你通常需要做四件事。
您要做的是在世界空间中找到位于远处剪裁平面上的点,该点位于窗口空间中的特定x,y坐标处。您要查找的点是<x,y,1>
( z = 1 对应于窗口空间中的远平面)。
鉴于这一点,您需要转换回NDC空间
进入NDC空间后,您可以应用反投影矩阵转换回视图空间。
从视图空间中,应用逆视图矩阵以到达满足条件的世界空间中的点。
大多数数学库都有一个名为UnProject (...)
的函数,可以为您完成所有这些操作。我建议使用它,因为你标记了这个问题D3D和OpenGL,其中一些转换的细节因API而异。
你最好知道它们是如何工作的,即使你自己从未实现它们。我认为您缺少的关键是视口,我有一个答案here可以直观地解释这一步骤。