View矩陣

視變化,是將世界座標系下的座標變化到攝像機座標系,視變換是通過乘以視圖矩陣實現的。
我們要知道視並不存在真正的攝像機,只不過是在世界座標系裏面選擇一個點,作爲攝像機的位置。
然後根據一些參數,在這個點構建一個座標系。然後通過視圖矩陣將世界座標系的座標變換到攝像機座標系下。
我們先簡單說一下我們的目標,在世界座標系中選取一點作爲觀察點,並以觀察點建立一個座標系
以觀察點建立的座標系就是我們需要的攝像機座標系,在建立此座標系後,我們做的就是通過矩陣將世界座標系下點的座標變換到攝像機座標系下。
View矩陣可以由兩個矩陣合成,
一個是將攝像機平移至原點的矩陣T,
一個是將座標點從世界座標系轉換至攝像機座標系的矩陣R
推導過程
視點:相機在世界座標中的位置 eye(eyeX, eyeY, eyeZ)
被觀察的目標點. 指明相機的朝向 at(atX, atY,atZ)
頂部朝向:確定在相機哪個方向是向上的,一般取(0, 1, 0) up(upX,upY, upZ)

在使用過程中,我們是要指定的參數即爲攝像機位置(eye),攝像機指向的目標位置(target)和攝像機頂部朝向(up)向 量三個參數。
Step1 : 首選計算攝像機鏡頭方向 forwrad=(target−eye),
進行歸一化forward=forward/|forwrad|。
Step2: 根據up vector和forward確定攝像機的side向量:
歸一化up vector:viewUp′=viewUp/|viewUp|。
叉積:side=cross(forward,viewUp′)
Step3 : 根據forward和side計算up向量:
叉積:up=cross(side,forward)(注意此up向量是垂直於forward和side構成的平面)
這樣eye位置,以及forward、side、up三個基向量構成一個新的座標系, 注意這個座標系是一個左手座標系
因此在實際使用中,需要對forward進行一個翻轉,利用-forward、side、up和eye來構成一個右手座標系,稱爲觀察座標系或者u-v-n座標系。
我們的目標是計算世界座標系中的物體在攝像機座標系下的座標,也就是從相機的角度來解釋物體的座標。從一個座標系的座標變換到另一個座標系,這就是不同座標系間座標轉換的過程。
利用旋轉和平移矩陣求逆矩陣
將世界座標系旋轉和平移至於相機座標系重合,
這樣這個旋轉R和平移T矩陣的組合矩陣M=T∗R,
就是將相機座標系中坐 標變換到世界座標系中座標的變換矩陣,
那麼所求的視變換矩陣(世界座標系中座標轉換到相機座標系中座標的矩陣)view=M−1.
先寫出平移矩陣

接下來,我們要求旋轉矩陣,利用基變換和座標變換進行求解。我們在此求的是 將攝像機座標系下變換到世界座標系中座標的變換矩陣。
此時我們可以得到一個座標基矩陣,(其實我們此時可以對旋轉有了更深層次的理解,旋轉其實可以理解爲基變換)就是上面求得的side、up、forward基向量構成的矩陣,寫成4×4的矩陣:

那麼所求的矩陣view計算過程如下:

在計算過程中,使用到了旋轉矩陣的性質,即旋轉矩陣是正交矩陣,它的逆矩陣等於矩陣的轉置。因此所求的:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章