zoukankan      html  css  js  c++  java
  • 左乘 右乘

      齐次变换可以是相对于共同的参考坐标系的变换,也可以相对于变换过程中不同的当前坐标系来实现变换。不同的变换矩阵相乘的顺序(左乘与右乘),可以得到不 同(相反)的结果。由于OpenGL使用的是左乘(向量左乘变换矩阵),这里用左乘来举例。

        对于变换矩阵R = Rz * Ry * Rx

    1) 相对于参考坐标系O(固定)的变换

        V’ = R * V = Rz * Ry * Rx V,对于左乘变换矩阵(从右向左进行),其变换为V向量对于参考坐标系(固定)先绕x轴旋转,再绕y轴旋转,最后绕z轴旋转,得到的新向量V’,在整个变 换过程中均是相对于同一坐标系O的x,y,z轴进行的,得到的V’也是同一参考坐标系O中的矢量。

    2) 相对于当前坐标系的变换

        则每个平移、旋转变换始终相对于当前坐标系(坐标系随着平移、旋转)。变换顺序为从左往右(即右乘矩阵)。对于V’ = R * V = Rz * Ry * Rx V,相当于最初的参考坐标系O,绕z轴旋转(变成O1),再绕y轴旋转(变成O2),最后绕x轴旋转(变成O3)。得到的V’是O3坐标轴中的V在原始坐 标轴O下的矢量。
    所以对于同一的变化矩阵R,可以理解为两种不同的变换方法。
    OpenGL对模型进行旋转、平移和缩放。用到三个子函数: glTranslate*(x, y, z) 、 glRotate*(x, y, z) 、 glScale*(x, y, z) 。每个函数都会产生一个矩阵,并右乘当前矩阵。

    对与变换:

        glRotatef(45.0, 0.0, 0.0, 1.0);
    glTranslatef(3.0, 0.0, 0.0);

    这 两个变换,可以看成:

        glMultMatrixf(R);
    glMultMatrixf(T);

    R,T 都是右乘到CTM(当前变换矩阵):CTM = CTM * R * T

    对模型变换的理解有两种:

    1) 在固定坐标系下,对物体进行变换。这时候,要以相反的顺序来考虑代码中的变换函数了,它的实际过程是这样 P = CTM *( R*(T* P’))。首先对物体进行平移,平移到坐标(3.0, 0.0, 0.0)。然后,把物体相对原点绕z轴旋转45度。

    2) 物体捆绑在局部坐标系下,所有的变换都是在当前坐标系进行的。这时,变换可以看成:

        glRotatef(45.0, 0.0, 0.0, 1.0) 产生一个齐次矩阵 R(代表一个局部坐标系),即局部坐标系R 相对刚才开始的坐标系I(单位矩阵)作了旋转变换,绕z轴旋转了45度。
    glTranslatef(3.0, 0.0, 0.0) 产生一个齐次矩阵 T (也是代表了一个局部坐标系),相对 R 坐标系沿x轴(R系)平移了3个单位,得到了自己的局部坐标系T,最后在T下进行绘制。


    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

  • 相关阅读:
    virtualenv与virtualenvwrapper
    数据类型、变量定义、数据类型转换
    计算机存储单元、标识符
    html单页面中用angular js
    svn客户端访问失败,错误“请求的名称有效,但是找不到请求的类型”的解决
    php 获取某数组中出现次数最多的值(重复最多的值)与出现的次数
    数据库导入时出现“2006
    phpstorm 激活
    取消本地SVN文件夹与服务器的关联
    js实现倒计时函数
  • 原文地址:https://www.cnblogs.com/skiwnchiwns/p/10221115.html
Copyright © 2011-2022 走看看