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

时间:2015-06-19 01:17:27

标签: directx-11 depth-buffer directxmath

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

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

1 个答案:

答案 0 :(得分:0)

此公式有效:

z'=(far+near)/(2*(far-near))+1/z*(-far*near)/(far-near)+1/2

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