关于3d:View Space&的关系是什么?

What is the relation between View Space & NDC?

我想将屏幕空间坐标中的拾取光线转换为Directx11中用于拾取的视图空间。

以下是FrankD.Luna的"Directx11 3D游戏编程入门"中解释此转换的一部分。

我不理解红色部分:据我所知,我们用投影矩阵乘以顶点,将它们从视图空间转换为均匀的剪辑空间。然后硬件进行透视分割,转化为NDC空间。那么,我们怎样才能通过x坐标与长宽比r相乘来逆转这种转换呢?

通常使用xmvector3unproject()来实现此转换,这将反转视区转换,然后乘以(逆投影*逆视图*逆世界)矩阵。

有人能解释为什么吗?使用纵横比的其他"方法"有效吗?

Excerpt explaining screen space to view space transformation

预计起飞时间?T:我在下面添加了参考的5.6.3.3部分:

enter image description here


I don't understand the part in red: As far as I know, we multiply vertices by the projection matrix to transform them from the view space to homogeneous clip space. Then the hardware does the perspective division, transforming into NDC space. So how can we reverse this transform just by multiplying the x coordinate with the aspect ratio r?

这只适用于图像平面中的点(在视图空间中),因为这些点在投影时不会改变其X和Y坐标,而不会改变其X方向的纵横比。

您可以将视图空间视为位于相机中心(C)的(查看)截锥。图像平面在距离相机中心C一定距离(即在znear距离)处与该视锥相交。当进行透视投影时,比znear更接近c的物体在屏幕上被缩放为更大的物体,"后面"的物体图像平面被缩小(这是透视失真)。这在技术上是通过在齐次坐标中用w划分来实现的。关键是图像平面中的点没有缩放。你可以想象一个截锥变形成一个立方体,图像平面保持相同的大小,即无限大的平面与截锥以及立方体的交点。

现在,在想象截锥体视图空间-->立方体之后,唯一需要做的就是应用纵横比来匹配(ndc-)立方体的x、y坐标到屏幕矩形。这是通过保持y并且只将x除以r来完成的。这是通过取ndc坐标并乘以r来撤消的步骤。但这只会使您从矩形到ndc坐标(ndc立方体的横截面)中的正方形图像平面。这个投影不会被撤消。

诀窍是,设计的这个图像平面横截面等于视图空间中的横截面,正如我用想象中的变形描述的那样。所以你可以从技术上说你的点(x_v y_v)再次在视图空间坐标中-尽管你总是在图像平面中。之所以说视场空间(这是一个很好的视场空间),是因为你现在可以通过你的(x_v,y_v)从c射入一条光线,而你原来的三维物体点就在这条光线上。只有距离z未知。例如,您可以从深度缓冲区查找中得到这个距离,这就是xmvector3unproject可能正在做的(我猜)。