XMVector3Unproject - 屏幕到特定 Z 的世界坐标

XMVector3Unproject - Screen to world coordinate at specific Z

我想在 Directx 11 中将屏幕坐标转换为世界坐标。我发现可以使用函数 XMVector3Unproject 轻松完成。有一个问题,我想选择我自己的 Z 坐标来告诉函数我的点离相机有多远(屏幕坐标是 2d,世界坐标是 3d)。根据我的观察,我必须弄清楚我的点在深度缓冲区上的位置。

我的深度缓冲区范围从 0.0 到 1.0(通常情况)。我的近平面是 0.1f,远平面是 1000.0f。我知道深度缓冲区的值分布不均匀。事实上,对于我的设置,20.0f 在深度缓冲区上约为 0.995(接近近平面但在深度缓冲区中几乎一直向下)。我如何计算出这些值?

这个公式有效:

其中 z 是与相机的距离(在我上面的示例中为 20) nearfar 是近距和远距裁剪平面(分别为 0.1 和 1000)。资料来源:Z-buffering