我正在将阴影特征扩展到我已经创建的我已经创建的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]逆* [Xpi]逆* [Xiw]逆,并将其与屏幕空间的x,y,z相乘 它会让我回到世界空间吗?
答案 0 :(得分:1)
让我猜一下。 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回到世界空间,因为法线只去图像空间。也没有涉及的视角。