Answers:
这类似于您可以在相机上捕获我们世界的2D图片的方式。以X,Y和Z坐标描述了3D环境,但是最终您需要将其映射到仅具有X和Y轴的2D屏幕。这是通过投影来完成的,其中每个3D点都投影到2D视图平面上。
简而言之,您可以想象从3D空间中的虚拟摄像机穿过视图平面到每个3D点的投影线。投影线与2D平面相交的点是3D点的投影。在正交投影中,这些投影线都是平行的。物体和相机之间的距离对投影形状没有任何影响。这种类型的投影并不现实,但在某些情况下很有用,例如使用3D引擎(例如HUD)绘制2D图形。另一种类型的投影是透视投影,其中这些线会聚,从而使更远的对象看起来更小并给出更真实的结果。此页面上的一些图可以帮助您可视化该过程。
投影是在图形管线中进行的几个变换对象之一,通常使用投影矩阵来完成。请注意,尽管投影意味着放弃Z坐标,但实际上仍然使用转换后的Z值来衡量屏幕深度,以便我们可以分辨哪些对象可见,哪些对象被其他对象遮挡。这称为z缓冲。
矩阵。或者说,很多矩阵数学。
对于那些没有经验的人来说,这是可怕的东西。通常,将三个空间中的3D坐标转换为屏幕上的2D坐标(包括进入屏幕的深度为Z)涉及三个3x4矩阵。
3D矩阵是在4x4网格中排列的一组16个浮点值。使用算法生成所需的值,然后使用矩阵向量乘法,这些数字将转换为3维向量(X,Y,Z)。
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
这是单位矩阵。实际上,它对向量的坐标没有任何作用。
第一个是世界或模型矩阵。该矩阵采用围绕原点(0,0,0)建模的单个模型(例如板条箱)中的顶点,并将其转换为世界顶点坐标。这可能包括缩放对象,围绕其原点旋转它,最后将其平移到场景中的位置。
第二矩阵是视图矩阵。这将获取世界坐标并对其进行变换,以使它们位于视图的上下文内。摄像机的概念通常用于生成此矩阵。
摄像机通常包含位置矢量,方向或目标矢量以及上矢量。这个向上的向量描述了相机的“旋转”。
这些向量用于生成所谓的外观矩阵。
这具有与世界矩阵类似的效果,因为它实际上是旋转并平移摄影机周围的世界以“定位”摄影机。
沿X轴为10个单位的摄影机将在另一个方向上平移世界坐标10个单位。
难题的最后一部分是投影矩阵。在类似相机的透视投影中,矩阵会转换几乎屏幕的坐标,以给出x度视野的透视幻觉。
如果您考虑屏幕的角点(对于640x480游戏),这就是投影如何在屏幕的2D坐标内沿Z轴“对齐”坐标。对于正交投影,不会沿Z轴缩放到屏幕中。从透视图上看,对象离屏幕越远,相对于屏幕范围而言,它变得越小。