繁体   English   中英

世界空间反投影透视

[英]perspective to world space inverse projection

我将阴影功能扩展到我作为班级作业创建的现有3d渲染器。 我正在尝试实现2遍z缓冲区算法。 我已经完成了第一遍并创建了深度图。 但是,问题是我将屏幕空间中的线栅格化,因此必须将坐标重新带回图像空间,因为深度图的z值与片段坐标的z值之间的比较是在图像空间中进行的。

我使用堆栈实现以以下形式存储空间转换矩阵:

[Xsp] * [Xpi] * [Xiw] *(x,y,z)世界空间中的坐标=屏幕空间中的x,y,z,其中Xsp-屏幕透视Xpi-图像透视Xiw-世界图像

在这里,堆栈的底部包含Xsp,第二至底部包含Xsp与Xpi相乘,第三至底部包含Xsp * Xpi与Xiw相乘的结果.....

现在,我只想要图像空间中的x,y,z,即(世界空间中的Xiw * x,y,z),所以在世界空间中获取x,y,z将对我有用...是否有可能如果我将每个矩阵的逆值相乘,然后将结果与屏幕空间中的x,y,z相乘,则实现???

我的意思是,我想做

[Xsp] inverse * [Xpi] inverse * [Xiw] inverse,并将其与屏幕空间的x,y,z相乘将使我回到世界空间?

让我猜猜。 USC CS580?

无论如何我会帮忙。

最初如何获得顶点:

Xsp * Xpi * Xiw * Xwm * v = vf //Concat * model-space vertex = raster-space vertex

vf' = (vf.x / vf.w, vf.y / vf.w, vf.z / vf.w); //Perspective

如何用vf找回它:

Xwm * vf = Xiw^-1 * Xpi^-1 * Xsp^-1 * vf' //Inverted partial concat * raster-space vertex = world-space vertex

v = (vf.x / vf.w,  vf.y / vf.w, vf.z / vf.w); //Perspective again

法线是相同的想法,除了法线只进入图像空间外,您只需要一个反转的Xiw即可返回世界空间。 也没有涉及任何观点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM