zoukankan      html  css  js  c++  java
  • Lecture04_转换控制_GAMES101 课堂笔记——2020.2.21

    学习内容概览:

    上节内容补充:

         旋转 ( heta) 角是旋转 (- heta) 角的矩阵转置,如果旋转 (R_{ heta}^T = R_{ heta}^{-1}),则该矩阵为正交矩阵。

    一、3D transformations

        类似2D使用齐次坐标表示(点用1,向量用0):

    • 3D point = (left(x,y,z,1 ight)^T)
    • 3D vector = (left(x,y,z,0 ight)^T)
          通常,((x,y,z,w)(w!=0))是3D的点:

    [egin{pmatrix} x^{'} \ y^{'} \ z^{'} \ 1 end{pmatrix} = egin{pmatrix} a & b&c&t_x \ d& e&f&t_y \ g&h&i&t_z \ 0&0&0&1 end{pmatrix} cdot egin{pmatrix} x \ y \ z \ 1 end{pmatrix} ]

    ( 一 )齐次坐标表示3D 变换

    顺序:先线性变换再平移。

    1. 3D 变换

    • 缩放和平移:

    • 绕着x、y、z轴旋转:
          固定旋转轴,分别绕着另外两个轴旋转。
      问题:为何绕 Y 轴旋转的旋转矩阵中 (-sin alpha)(sin alpha) 的位置不同?
      Ans:因为 (X imes Y)得到 (Z) 轴, (Y imes Z)得到 (X) 轴,连续书写字母顺序是:XYZXYZ...但是(Z imes X)得到 (Y) 轴,所以 (Y) 因此是反的。

    2. 3D 旋转

        对于任意一个旋转 (R_{xyz} left(alpha,eta,gamma ight)),可以由 (R_xleft(alpha ight))(R_yleft(eta ight))(R_zleft(gamma ight)) 组成。其中,(alpha)(eta)(gamma) 称为欧拉角(Euler Angles)。通过下图中的操作,可将飞机的头朝向任意方向。

    3. 罗德里格斯公式(Rodrigues’ Rotation Formula)

          在三维旋转理论中,对于给定旋转轴和旋转角度,以Olinde Rodrigues命名的罗德里格斯公式是用于在空间旋转向量的高效算法。
         旋转轴为 n 轴,旋转角为 (alpha) .默认旋转轴过原点(若不过原点,可想将其移至原点,然后做线性变换后,在将其平移至原位置)。其中,罗德里格斯公式如下:

    另外提到一个概念:

    四元数:便于计算旋转与旋转之间的差值。

    二、观测变换(View/Camera Transformation)

    ( 一 )What is view transformation?


         以上三步简称"MVP"变换。

    ( 二 )How to perform view transformation?

    1. 主要定义三个要素:
    • 位置
    • 观测方向
    • 向上的方向(类似地图上的向北指向,以便确定整个观测的位置。)
    2. 进行视图变换

         约定:相机在原点,向上指向 Y,看向 Z 方向。

    3. 相机转换步骤

    4. 写成转换矩阵

    总结

    三、投影变换

    ( 一 )投影变换的分类


         其中,人眼成像类似于透视投影(右图);正交投影(左图)常用于工程制图。

    ( 二 )透视投影 VS 正交投影

         透视投影是在一个点投射成四棱锥形成;正交显示若将相机放于无限远,远、近平面将无限接近。

    下面,将对透视投影和正交投影分别进行阐述。

    四、正交投影

    ( 一 )3D化2D方法:

         主要将平移和缩放放在(left[-1,1 ight]^2)中。

    ( 二 )3D 常用方法

         定义一个空间中的立方体,将其映射成标准立方体(left[-1,1 ight]^3)中。“先平移再缩放”

    注意:此时的([f,n])中,远平面 f < 近平面 n,因为是沿着 (-Z) 方向查看。但是在OpenGL中,由于是左手坐标系,因此f>n,是 (left[n,f ight])

         变换步骤:先平移再缩放。

    ( 三 )变换矩阵

         先将中心移至原点,再将其边长缩放为2。(在坐标轴[-1,1]范围内。)

         坐标系选择不同,会导致结果不同。

    五、透视投影


         透视投影是目前最广泛的投影,近大远小,效果:放远处平行线不再平行,例如这个平行的铁轨。

         其中关于那个矛盾,是因为欧式几何是在同一个平面内,而这个铁轨照片里面包含了许多个平面,是在不同平面、不同角度,因此会感觉有些矛盾。

    ( 一 )回顾:齐次坐标性质

         其中,这里面这个结论很重要,在后面进行透视投影中会用到。

    ( 二 )怎样进行透视投影?(难点)

         简单说,就是把这个Frustum的远平面f挤成同近平面n一样大的平面,然后进行正交投影。
    约定:

    • 近平面不变
    • 远平面f的中心点不变
    • Z值仍为f

           关于远平面挤压后坐标的变化,(通过相似三角形算出)等值关系:

           在齐次坐标中,利用乘以一个数,仍为原点,先乘以 (frac{n}{z})

           透视投影到正交投影:

           求第三行四个问号的值:
    1. 观察特殊性——远、近平面的点特殊性:

    2. 利用近平面的点不变性,计算出第三行的前两个问号,得出一个等式(An + B = n^2)

    3. 利用远平面的点,Z坐标值不变性,得出(Af + B = f^2)


         

    4.将第2、3步的等式联立,得出A、B的值。

    Question:对于中间任意一点(x,y,z),在经过挤压后(将其变为立方体后),变换后的Z值会靠近远平面还是靠近近平面?
    Ans:会更大一些,因为是双曲线上的一段。

  • 相关阅读:
    [android] 实现返回键操作思路
    [android] 切换界面的问题
    [android] 切换界面的通用处理
    [android] 界面切换的简单动画
    [android] 界面切换的核心方法
    [android] 标题部分管理
    [android] 界面的划分
    [android] socket在手机上的应用
    [android] 网络链接类型和渠道
    [android] android通信协议
  • 原文地址:https://www.cnblogs.com/somedayLi/p/12343584.html
Copyright © 2011-2022 走看看