OpenGL 学习笔记(十三)

一、三维模型

基本三维变换

三维齐次坐标

齐次坐标表示就是用n=1维向量表示一个n维向量

       其实,有关二维图形几何变换的讨论基本上都适合于三维空间,只不过三维空间的几何变换要复杂得多。 

       也就是说,三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘。

        和二维变换为例,根据T3D在变换中所起的作用。我们可以把T3D分成四个子矩阵

T1,是一个三乘以三阶的子矩阵,它的作用是对点进行比例对称、旋转、错切变换。

T2,是一个一行三列的子矩阵,作用是对点进行平移变换。

T3,是一个三乘以一节的子矩阵,作用是进行透视投影变换。

T4,是一个一乘一阶的子矩阵,作用是产生整体比例变换。
 

 基本的三维变换:

 平移:

 比例:

        整体比例变化没有什么变化,仍然是在这里的S在起作用,而且,也是S大于一的时候,反而是整体缩小。

         旋转就比较复杂了,三维旋转变换可以看成是二维旋转变换的组合,分别取XYZ作为旋转轴,让每个旋转轴的三维旋转可以看成是在另两个坐标轴组成的二维平面上进行的二维旋转。将二维旋转变换组合起来,就得到了总的三维旋转变换了。需要说明的是,当沿坐标轴往坐标原点看过去的时候,沿逆时针方向旋转的角,是正向旋转角,所以实际上满足右手定则,也就是,用大拇指指向围绕旋转的轴向,而这时候四指转的方向,就是正方向。
 

        那么回顾之前的二维变换。如果我们把隐藏的这个Z轴加入,是不是可以根据右手定则认为逆时针的方向是正方向?

         下面我们就来看一下在三维空间中,绕Z轴、X轴和Y轴的旋转会怎样。首先,绕Z轴旋转,这时候Z的坐标不变,而XY变化正好,就从二维的正向旋转一样。这样我们就可以得到三维点绕Z轴正向旋转θ角度的计算形式,是这样的一个矩阵。同理,我们也可以推导出绕X轴、绕Y轴旋转的变换矩阵,分别看一下它的矩阵形式。这就是旋转变换。
 

        对称变换后的图形,仍然是原图形关于某一轴线,某一坐标平面或原点的镜像,注意这里增加了一个坐标平面。但是变换矩阵仍然十分简单

        可以看一看,比如关于坐标平面的对称变换,我们已关于Xoy平面对称为例

        这个时候,XY都不变,只有Z取反了。所以,矩阵的对角线上,只有第三行,第三列为-1,其余,保持单位矩阵不变。

         同样,我们可以推出相对于坐标轴或者坐标原点的对称变换矩阵。而对于用于产生弹性物体的变形处理的错切,在三维空间中就可以沿XYZ_3个方向发生错切位移。比如如果有一个X方向上的错切。这时点的YZ都不变,可是X值叠加了一个与YZ相关的增量,也就是x'=x+dy+gz,而其他方向上,也是同样的道理。以上,就是几种基本变换推广到三维后的结果。
 

      再来看一个变化,那就是逆变换。

      所谓逆变换,就是与上述变换过程相反的变换。

      比如说对于平移比例和旋转分别是怎样的?我们来看一下。

      首先来看看平移的逆变换。平移的逆变换当然就是反向平移了,将平移后的点移回到原处。那么变换矩阵中,它的相应的平移矢量,就与原来是相反数。

        比例的逆变换:它是把比例变化后的点,变换回原来的尺寸。

        局部比例变换的逆变换矩阵中,比例因子,那肯定就是原来的导数。而整体比例变换的逆变换矩阵中。S,当然也是原来的导数。

         旋转变换的逆变换,很显然,我需要把它反向旋转回去,也就是说,你绕哪个轴的旋转,只要用对应的-θ代替,就可以得到对应的逆变换矩阵了。

           无论是二维变换还是三维变换。我们都会发现,其实都是基本的几何变换。

           因为这些变换都是相对于坐标原点和坐标轴进行的几何变换。可是,有的时候有这样的一种需要,也就是需要相对于任意点任意轴进行变换。

           这里就需要用到复合变换。

           三维复合变换是指图形做一次以上的几何变换。

        那么现在,我们就以复合变换的思想来分析一个相对于任意参考点F的三维变换。好了,既然我们只能相对于原点进行变换。

        那么我们是不是可以这样考虑?我们把这个点移动到原点。然后,该怎么变换,就怎么变换,变化完了之后,再移回去。也就是说,把这个过程分成了以下三个步骤。

        第一个,将参考点F移至坐标原点,这时候进行一个平移变换。

        第二个,针对原点进行相应的二维几何变换。

        第三个,就是进行反平移,将参考点F又移回到原来的位置。

        这里的反平移就是原来平移的逆变换,所以大家大概可以明白逆变换引入的目的
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值