透视到世界空间逆投影
perspective to world space inverse projection
我正在将阴影功能扩展到我作为课堂作业创建的现有 3D 渲染器。我正在尝试实现 2 次传递 z 缓冲区算法。我已经完成了第一遍并创建了深度图。但是,问题是我在屏幕空间中栅格化了我的线条,因此我必须将坐标带回图像空间,因为深度图的z值与片段坐标的z值之间的比较是在图像空间中进行的。
我使用了一个堆栈实现,它以以下形式存储空间变换矩阵:
[Xsp] * [Xpi] * [Xiw ] * (x,y,z) 世界空间中的坐标 = 屏幕空间中的 x,y,z其中 Xsp - 透视到屏幕Xpi - 图像到透视秀 - 世界到图像
这里,堆栈的底部包含 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它会让我回到世界空间吗?
让我猜猜。南加州大学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就可以回到世界空间,因为法线只去图像空间。也不涉及视角。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 透视到世界空间逆投影
- 取消将二维屏幕位置投影到三维世界空间
- 我需要澄清"Spaces"的概念(世界空间,视图空间,投影空间,局部空间和屏幕空间)(c ++,direct3d 11)