深度重建世界坐标

熟悉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
2
3
4
float depth = texture(depthTex, texcoord);
vec4 ndcPos = vec4(2 * texcoord, 2 * depth - 1, 1.0f);
vec4 worldPos = InverseVP * ndcPos;
worldPos.xyz /= worldPos.w
Author

InverseDa

Posted on

2023-03-27

Updated on

2023-03-30

Licensed under

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×