我想从屏幕空间变换采摘射线坐标视图空间,为采摘目的,在DirectX 11View Space和NDC之间的关系是什么?
下面是部分(从“入门3D游戏编程与DirectX 11 “由弗兰克D卢纳)解释这种转变。
我不明白红色的部分:就我所知,我们将顶点乘以投影矩阵,以将它们从视图空间转换为均匀的剪辑空间。然后硬件进行视角划分,转化为NDC空间。那么我们如何才能通过将x坐标乘以纵横比r?
通常使用XMVector3Unproject()来实现这种转换,它将视口转换逆转,然后乘以(反投影*逆视图*逆世界)矩阵。
有人可以解释如何(为什么?)这种其他“方法”使用宽高比的作品?
编辑:我已经添加引用5.6.3.3部分如下:
我比dx更多的是opengl,但对我来说,似乎误解是红盒子“只”给你一个点从你的相机中心拍摄光线。我的意思是,你实际上并没有找回“丢失的”透视分界和一个3d点的NO x,y,z坐标。相反,搜索到的3d位置在光线C + a *(x_v,y_v,1)处的任何地方,其中C是相机中心,如上所述的x_v和y_v,并且“1”是到相机平面的距离(焦距) - 这在directx中可能不是1(不知道)。 – Thomas
你可能应该查看第5.6.3.3节来弄清楚纵横比与那里的视角差距有多大...... –
@Thomas我认为你所说的是朝着正确的方向前进。你能解释一下吗? – HaroldReyiz