zoukankan      html  css  js  c++  java
  • 特殊变换(读书笔记6 --- Real-Time rendering)

    本章主要介绍对于real-time graphics非常重要的矩阵变换和操作

    欧拉变换

    欧拉变换是构建使你自己(即相机)或者任何其他实体朝向某个方向的矩阵变换的最直观方式。

    首先必须确立默认的view direction.欧拉变换是三个矩阵的乘积,即如图所示的旋转。

     

    由于E是一连串的旋转,所以它也是正交的。所以它的逆矩阵就是

    欧拉角h,p,r代表head,pitch,roll的旋转角度和顺序。如,改变head的角度会使viewer摇脑袋说no,改变pitch会使它点头,rolling会使他的头斜向一边。

    使用欧拉变换时,可能会发生 gimbal lock(万向节锁)。万向节锁是指物体的两个旋转轴指向同一个方向。实际上,当两个旋转轴平行时,我们就说万向节锁现象发生了,换句话说,绕一个轴旋转可能会覆盖住另一个轴的旋转,从而失去一维自由度 欧拉角有一些限制。两个欧拉角很难结合在一起工作,如欧拉角插值不适合用来表示旋转插值(等角速度)。可以使用四元数插值来代替。

    从欧拉变换中提取参数

    从正交矩阵中提取欧拉参数h,p,r

     

    特殊情况,cosp=0时,f01=f11=0,不能用atan2函数

     矩阵分解

    矩阵分解的使用场合:

    1. 从一个object中提取scaling factors

    2. 特殊系统需要找到变换矩阵

    3. 确定某个model是否只经过了rigid-body变换

    4. 当只有object矩阵提供时,在动画中关键帧的插值

    5. 从旋转矩阵中去除shears

    绕任意轴旋转

    变换过程:先找到和r互相垂直的两个轴,作为basis,然后将base从standard basis变换到一个新的basis,再绕x轴(r)旋转 a 弧度,最后再变换回standard basis

    变换公式为

  • 相关阅读:
    使用BackgroundWorker组件进行异步操作编程《转》
    C#多线程控制进度条之长任务操作《转》
    模态进度条窗体实现<转>
    dev xtraReports使用《转》
    客户端IP
    WebService获取服务端硬件信息和客户端IP,MAC,浏览器信息,所在城市《转》
    c#多线程 Invoke方法的使用<转>
    C# windowform进度条《转》
    XtraReports 打印控件的简单使用《转》
    hdu Marriage Match II
  • 原文地址:https://www.cnblogs.com/lxb0478/p/6323515.html
Copyright © 2011-2022 走看看