我正在将阴影功能扩展到我作为课堂作业创建的现有 3d 渲染器。我正在尝试实现 2 pass 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 相乘,它会让我回到世界空间吗?