从深度缓冲区创建世界位置坐标(无gpu阴影)

时间:2019-06-25 18:00:57

标签: c++ geometry position depth

首先让我说这是纯c ++,与gpu着色器无关,因为有很多关于如何使用Providen变换矩阵解决gpu着色器中此类问题的话题。

最初,我具有线性数据深度的平方纹理(浮点纹理),在我的情况下,我有两个从-0.5到0.5的变量xpos和ypos,显然它们与纹理中的位置有关。 / p>

我假设我的相机具有一个单位变换矩阵,所以我还可以假设zpos为0.5以创建一个90度三角形。 所以我也可以做到这一点:

float screenSpaceDistance = sqrt(xpos_2 + ypos_2 + zpos_2);

xpos_2 = xpos * xpos等等。

我的实现是:

X = depth * xpos / screenSpaceDistance;
Y = depth * ypos / screenSpaceDistance;
Z = depth * zpos / screenSpaceDistance;

但不幸的是,这给了我一个“弯曲”的投影,即。该图像来自将盒子中的相机应用到一些具有不同方向(以及其他圆锥体)的相机之后

enter image description here

对此有何想法? 我知道问题出在我的数学上,并且Z坐标没有正确创建,但是我无法想象自己如何解决它。

提前谢谢!

0 个答案:

没有答案