深度重建世界坐标
熟悉MVP流程
MVP变换中,一般是这样得到裁剪坐标:
之后,经过透视除法,得到NDC坐标:
深度重建世界坐标
正常的MVP变换中,一般由如下操作获得裁剪坐标:
然后进行透视除法获得NDC坐标:
现在我们需要将NDC坐标逆推回世界坐标,容易知道:
构造一个新的clipPos:
带入回去,得到:
但注意到$\bf worldPos.w=1$,于是:
所以可以间接求出$\bf clipPos.w$
代入原式,得到:
因此我们不需要$\bf clipPos.w$也是可以得到世界坐标的,因为$\bf ((PV)^{-1}\times (NDCPos, 1)).w$其实就是$\bf worldPos.w$,所以只要算出$\bf (PV)^{-1}\times (NDCPos, 1)$,然后除以自身即可!
代码如下:
1 | float depth = texture(depthTex, texcoord); |