首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图空间与NDC的关系是什么?

视图空间与NDC的关系是什么?
EN

Stack Overflow用户
提问于 2016-10-10 11:00:08
回答 1查看 5.3K关注 0票数 2

我希望将屏幕空间坐标中的拾取射线转换为视图空间,以便在DirectX 11中进行选择。

下面是一个部分(从弗兰克露娜的“3D游戏编程与DirectX 11介绍”)解释这一转变。

我不明白红色的部分:据我所知,我们用投影矩阵将顶点相乘,将它们从视图空间转换为齐次剪辑空间。然后硬件进行透视分割,转换为NDC空间。那么,我们如何通过将x坐标与宽高比r相乘来逆转这种变换呢?

通常使用XMVector3Unproject()来实现这种变换,它反转视口变换,然后乘以(逆投影*逆视图*逆世界)矩阵。

有人能解释(为什么?)这个使用高宽比的另一种“方法”是如何工作的吗?

EDİT:我在下面添加了参考的5.6.3.3部分:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 12:46:45

我不明白红色的部分:据我所知,我们用投影矩阵将顶点相乘,将它们从视图空间转换为齐次剪辑空间。然后硬件进行透视分割,转换为NDC空间。那么,我们如何通过将x坐标与纵横比r相乘来逆转这种变换呢?

这应该只适用于图像平面上的点(在视图空间中),因为这些点在投影时不会改变它们的x和y坐标,除非它们在x方向上进行缩放。

您可以将视图空间看作位于相机中心(C)的一个(查看)圆顶。图像平面与摄像机中心C(即zNear距离)相交。当做透视投影时,比zNear更接近C的东西在屏幕上被缩放成更大,图像平面后面的东西被缩小(这是透视失真)。这在技术上是由齐次坐标下的w除法实现的。关键是图像平面上的点不被缩放。你可以想象一个圆锥花序变形成一个立方体,图像平面保持相同的大小,是无限大的平面与锥体以及立方体的交点。

现在,在想象frustum视图空间->立方体之后,唯一需要做的就是应用宽高比来匹配(NDC-)立方体的x-,y-坐标到屏幕矩形。这是通过保持y和x除以r来完成的,这一步是通过取NDC弦并乘以r完成的,但是这只会让你在NDC坐标(NDC-立方体的横截面)中从矩形到正方形图像平面。这个投影并没有因此而被撤销。

诀窍是,像我想象中的变形所描述的,这幅图像平面的横截面按设计等于视图空间中的横截面。所以你可以从技术上说,你的观点(x_v,y_v)再次出现在视图空间坐标中--尽管你总是在图像平面上。谈论视图空间(以及它是一个好的空间)的原因是,您现在可以通过您的(x_v,y_v)从C中拍摄一条射线,而您最初的3D对象点就在这条射线上。只有它的距离z是未知的。例如,您可以从深度缓冲区查找获得这个距离,这就是XMVector3Unproject可能正在做的事情(我猜)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39956754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档