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相乘。它能让我回到世界空间吗??
让我猜猜看。南加州大学CS580?
不管怎样,我会帮忙的。
最初如何获得顶点:
1 2 3 | 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把它拿回来?
1 2 3 | 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回到世界空间,因为正常只去图像空间。也没有涉及到任何观点。