作者:i_dovelemon
来源:CSDN
日期:2014 / 9 / 28
主题:World Transform, View Transform , Projection Transform
引言
在3D图形学中,基本几何变换是一个非常重要的操作。可以说,整个3D图形能够有效的显示,就是由于几个非常重要的基础3D变换贡献的。在前面的文章中,向大家承诺了,要详细的讲解在3D图形学中的三个基本的坐标变换。今天,就来像大家讲述,DirectX是如何进行变换。
变换的目的
在我们讲解具体的变换工作之前,我们需要知道,为什么需要进行变换?在3D图形学中,有很多不同的坐标系统。比如说,模型坐标系统,世界坐标系统,视空间坐标系统,裁剪空间坐标系统等等。为什么需要如此之多的坐标系统了?那是因为,不同的工作,在不同的坐标系统中进行,会给我们的工作带来很多方便。比如说,我们定义模型的时候,在模型的坐标空间中定义,而不是在世界空间坐标系里面定义。在模型坐标里面,我们可以只关心模型的基本构造,它的外形等,不需要考虑它将来会放在场景中的哪个地方,面朝的方向是哪里。这样做就能够大大的减少我们的工作。所以,一句话,进行坐标变换的目的就是为了简化工作,让我们的工作更加容易的完成而已(虽然初学来说,好像没有简化我们的工作???)。
如何变换
在前面我写过一篇文章,3D图形变换。在这篇文章中,讲述了如何使用矩阵来进行同一个维度的坐标变换。不过,这里讲解的变换,只是对那些只需要进行平移,旋转的坐标系统来说的。对于要进行缩放的坐标变换,并不是使用这种方法。有时候,我们需要根据变换的各种条件,来推导出最终变换的矩阵。这种方法在那些变换后的矩阵很难用其他的坐标系统来描述它们的坐标基的时候使用。
DirectX变换流程
在DirectX中,有三种变换,是每一个3D应用程序,每一帧都会使用到的变换。它们分别是World Transform(世界坐标变换), View Transform(视空间坐标变换,又称相机坐标变换)和最麻烦的Perspective Projection Transform(透视投影变换,正交投影不是经常使用的变换,这里不介绍这种)。下面,我们来一一的介绍这些变换的作用,以及如何构建他们。
World Transform
世界坐标变换,顾名思义,是将模型坐标变换到世界空间中的变换。我们要知道,任何的变换都可以拆分称为平移,旋转,缩放,这三个大的变换方式。对于世界变换来说,我们完全可以按照3D图形变换中描述的那样来进行坐标的平移和旋转变换。如果需要将模型进行缩放的话,我们在构建一个缩放的矩阵(这个矩阵在任何3D书籍上都有介绍,这里不再赘述),然后把这个缩放矩阵,与前面的矩阵结合起来,就能够完成一个世界坐标变换的功能了。这是三个坐标变换里面最简单的变换。
View Transform