向量坐標轉換、旋轉矩陣以及視圖轉換


    在3d世界中,我們需要不停的在各個空間里面轉換坐標,比如把物體由模型空間轉化到世界空間,把世界空間中的點轉換到攝像機的視圖空間。我們知道,坐標轉換可以用向量與一個轉換矩陣相乘來達到轉換目的。但要注意的是如果選擇的是行向量,則是矩陣放在右邊相乘,如果是列向量,則需要把矩陣放在向量左邊相乘。如果不考慮位移,則我們可以用一個3X3矩陣來表示旋轉或者縮放操作。

    如果我們用行向量來表示某個模型空間中的某個點p( ppy p),假設模型經過旋轉后,新的軸在世界空間中表示為 r(表示左右軸),u(表示向上的軸)f(表示向前的軸),則旋轉矩陣為  

           r ry  rz

           u uy uz

           f fy fz

p與矩陣相乘后我們得到新的x點為 px*rx+py*ux+pz*fx,也就是p與旋轉矩陣的列向量的點積。向量的點積也可以理解為一個向量在一個向量上面的投影。如果我們從列的角度來觀察剛才的旋轉矩陣,其實我們可以發現第一列其實是原來的r軸向相反的方向旋轉后的新的r軸。同理第二列第三列相同。這樣我們就不難理解了。一個模型旋轉一個角度,我們可以讓模型不動,讓坐標軸沿着相反的方向旋轉相同的角度。旋轉后,每列就是坐標軸新的向量表示。點與旋轉矩陣相乘,其實就是原來的點在新的坐標軸上面的投影。

    在把所有的模型都轉換到世界坐標空間后,我們需要轉到到視圖空間,假定我們知道攝像機的從模型空間到世界空間的轉換矩陣就是上面的旋轉矩陣,要把物體轉換到相機空間,就需要上面矩陣的逆,正交矩陣的逆可以用該矩陣的轉置矩陣來表示。所以變換矩陣變為 

rux  fx

ry  Uy  fy

r uz  fz

世界空間中的某點p與該矩陣相乘,則得到(p*r  ,p*u  ,p*f),從這里可以看到世界空間的點轉換到視圖空間,其實就是點在相機各個坐標上面的投影。這里沒有考慮位置轉換,只考慮3X3矩陣是為了簡化思考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM