基本3D变换之World Transform, View Transform and Projection Transform

本文详细介绍了3D图形学中的World Transform, View Transform 和 Perspective Projection Transform,解释了为何需要这些变换以及如何构建它们。世界变换涉及平移、旋转和缩放,视图变换用于将物体坐标转换到相机坐标系,投影变换则负责将3D模型数据转换为2D图像,处理遮罩关系并保存Z值信息,以实现真实的透视效果。" 111280481,10295766,数据标准化方法详解与选择,"['数据预处理', '微生物生态', '统计分析', '数据转换', '标准化方法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:i_dovelemon

来源:优快云

日期: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


                     在3D空间中,我们会定义一个虚拟的实际上在3D空间中并没有用任何模型表示的相机。我们能够在程序界面上看到的内容,都是通过相机的位置,和属性等等来构建的。相机变换的作用是将原本相对于世界坐标中心的物体,变换到以相机为坐标中心的相机坐标空间中去。因为很多的处理,在世界坐标空间中进行比较麻烦,如物体剔除,背面消除等等。这些工作如果能够在相机坐标空间中进行的话,那么就会轻松很多。进行相机坐标变换我们需要定义相机的属性。在DirectX中使用的是一种称之为UVN的相机模型。我们定义了相机的三个坐标基向量Right,Up和Look向量在世界坐标系中的表示,以及相机在世界坐标空间的位置。这样,我们只要简单的使用3D图形变换里面介绍的方法,将这三个向量和位置属性构成如下的矩阵:

                                                                                               

                     不过读者需要注意:这里的矩阵,是将相机空间里面的坐标变换到世界坐标空间中去的矩阵。我们需要的是相反效果的矩阵,那么我们只要求这个矩阵的逆矩阵就可以了。求逆的过程,在任何的线性代数书上都有,这里直接给出逆矩阵:

                                                                                     

                       读者能够发现,这里的矩阵就是DirectX中使用的矩阵了。它的推导过程就是这么的简单。



Perspective Projection Transform

                       投影变换是这三个中最复杂的变换。在DirectX中,它的投影变换矩阵做了很多的事情。这也就导致了它的变换矩阵十分的复杂。所以,为了能够详细的掌握这个变换过程,我们先要弄清楚,进行这个变换的目的何在。

                      在DirectX中,投影变换的目的,是让3D的模型数据等变换称为2D的图像,从而显示在屏幕上,这个过程称之为投影。投影意味着,我们需要对模型的X和Y坐标进行一些变换,从而能够根据它在相机空间中的上下左右顺序,正确的绘制在屏幕上。同时,由于是3D空间,模型的图像之间存在这遮罩的关系,远的物体会被近的物体遮挡住,我们同样还需要保存一些信息,从而能够判断哪一个在前面,哪一个在后面,这个值自然就是Z值了。Z值越小,说明了它越靠近相机,那么它后面的物体就不应该被绘制,因为都被它挡住了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值