Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 关于世界坐标和局部坐标转换的问题

Viewing 3 reply threads
  • Author
    Posts
    • #4334 Score: 0
      行猿
      Participant
      -2 pt

      请问一下各位:为什么在bump和displacement中将新求得的的法向量变换回世界坐标时是左乘一个TBN矩阵而不是其转置呢?下面的图里是我的理解,不知道哪里出了问题,如果可以麻烦各位解答一下,万分感谢!

    • #4336 Score: 0
      行猿
      Participant
      -2 pt

      这是图

      Attachments:
      You must be logged in to view attached files.
    • #4340 Score: 0
      sublimation
      Participant
      3 pts

      [t,b,n]是局部坐标系的坐标轴的坐标,所以左乘TBN的转置矩阵的作用是将世界坐标系转换到法向量的局部坐标系。
      而TBN矩阵是TBN的转置矩阵的逆矩阵,作用是将局部坐标系的坐标转换为世界坐标系下的坐标。

      • #4365 Score: 0
        行猿
        Participant
        -2 pt

        感谢!但是这就是我不理解的地方,为什么从世界坐标到局部坐标的转换时左乘TBN的转置而不是TBN本身?

        • #4366 Score: 0
          sublimation
          Participant
          3 pts

          这是矩阵乘法的线性空间的角度去看的方式。当矩阵左乘列向量时,该列向量会和矩阵的每一行“相乘”,相乘的方式和两个向量做内积是一样的。所以如果每一行都是一个单位向量,那么内积的结果就等于该列向量在每一行的向量的投影的长度,也就是在“该矩阵的行空间”的坐标了。

          • This reply was modified 4 years, 1 month ago by sublimation.
          • #4370 Score: 0
            行猿
            Participant
            -2 pt

            但是一个矩阵怎么可以左乘列向量呢,假设列向量是3×1,矩阵是3×3,前者不能左乘右者吧?我的理解是,如果把世界坐标中的x轴映射成局部坐标中的t轴,x方向向量是(1,0,0)的列向量,t方向向量是(t.x,t.y,t.z)的列向量,假设转换矩阵用M表示,那么M*x = t。
            M*x的结果相当于M的第一列,因此M第一列就应该等于t;同理M的第二列第三列应该分别是b和n。那么这样看来从世界坐标到局部坐标的转换矩阵是TBN,如果要反过来从局部到世界,就应该是TBN的逆也就是其转置。所以我就不太明白为什么你说的从世界变换到局部是左乘TBN的转置。

            • This reply was modified 4 years, 1 month ago by 行猿.
            • #4372 Score: 0
              sublimation
              Participant
              3 pts

              矩阵*列向量

              • #4373 Score: 0
                行猿
                Participant
                -2 pt

                抱歉,之前看错了
                矩阵和向量相乘的法则我清楚,就是这个乘的矩阵我想不明白

    • #4400 Score: 1
      nightwatch
      Participant
      3 pts

      我差点被你这个图绕进去了
      简单的说,假如有两个向量V,两个不同的坐标系,a,b:
      V_a = Transform_b * V_b
      这个很容易理解,关键是这个Transform_b是怎么来的。Transform_b 是 b坐标系的三个坐标基,在a坐标系的表示。

      问题在这里,我们已知的t,b,n都是在世界坐标系下的t,b,n,是相对于世界原点而言的。所以这决定了推导公式的方向是从Local -> World来推导。
      所以 local坐标系中的(1,0,0)对应世界坐标系的(tx,ty,tz)
      即 [t,b,n] = T * I , 将局部坐标转成世界坐标系需要乘以TBN

      This post has received 1 vote up.
      • #4406 Score: -1
        行猿
        Participant
        -2 pt

        熬!我明白了,所以我表示的那个T矩阵实际上正是从局部坐标变换回世界坐标的矩阵。
        非常感谢!

        This post has received 1 vote down.
Viewing 3 reply threads
  • You must be logged in to reply to this topic.