如果你曾經用過乙個攝像機,你所知道的最具動態的場景將在場景中有乙個移動,不論是相機還是演員。在許多遊戲中,操作相機的能力也同樣重要。
移動相機來改變玩家在3d世界中看到的位置。相機使用view效果屬性來實現的,並且我們其實一直在使用它,儘管在所有我們的3d示例工程中沒有移動它。
在某些方面,有攝像頭似乎不是很必要。畢竟,這似乎沒有任何視覺上的不同在朝物件移動相機和朝相機移動物件。一旦我們開始構建複雜的有光照的多物件場景,然而,它變得非常方便來計算物件和光照座標,而不必擔心全部移動他們來模擬攝像頭移動。
攝像機位置和方向
為了移動相機,我們必須去弄清楚如何設定視角矩陣所需要的攝像機座標。幸運的是,xna為我們很關注這個,並且提供乙個非常有用的函式,createlookat。構建乙個視角矩陣例如隨後呈現的物件將被定位,如果相機移動到所需要的位置。
createlookat函式需要提供3塊資訊,都是關於vector3結構體。所需要的值,按照函式所需要順序,列在下面:
1)當前相機的位置作為在3d世界中的座標(相機位置)
2)在相機中看到的座標(目標位置)
3)告訴xna哪個方向朝上的向量(向上向量)
這些值得前2個很容易理解。檢視將會生成,因為當從相機位置直接朝目標位置看時,它將被看到。指定的目標位置將直接出現在渲染場景中心。向上向量需要更多一點的說明。簡單來說,它告訴xna哪個方位是向上的(朝場景的最頂端)相對於攝像機位置。在多數情況下,你可以提供乙個向量簡化沿著座標y軸上的點:(0,1,0)。向上向量不需要垂直於相機的視角方向。
有2種情況可能需要使用到乙個不同的向上向量值。第一種,如果我們想能夠轉動相機。轉動相機圍繞它的z軸以便它自己從世界的向上視角脫離視角的方法(180度轉動相機將導致一切顛倒)。
下圖顯示我們早期匯入的房子物件的三個視角。在這每乙個視角中,房子有相同放置位置;它僅是相機的已經改變的向上向量。左邊是相機的向上向量設定為(0,1,0)的視角,預設向上向量。中間圖形顯示相機向上向量為(0.5,0.5,0)的視角。相機已經轉動到右邊以便它的向上向量正對上邊和右邊(好比你的頭朝右邊)。因此,房子似乎朝左邊傾斜。在最後的中,相機的向上向量是(1,0,0),所以是沿著座標x軸向上。房子現在顯示朝左邊90度角方向旋轉。
滾動相機可能不是在所有遊戲中有用,但對於其中一些是非常便利的—任何遊戲模仿飛機或宇宙飛船的移動,舉例,將很可能想去使用它來允許飛行器傾斜到一邊就像在飛行那樣。
第二個解決辦法對於不同向上向量是必須的,當相機直接沿著y軸所看到的。如果相機直接向上看,我們將告訴它向前和向上是非常相同的方向。這並不真實,所以xna的轉換矩陣導致不會顯示任何東西。
在其它情況下,xna有非常寬容的值提供給向上向量,將很好的應對非標準化的和不垂直於相機實現角度的向量。
下面**顯示了乙個createlookat函式的簡單呼叫,來設定相機以便它位於(0,5,5)位置,集中在座標(0,0,0)位置,有乙個向上向量(0,1,0)。
matrix view = matrix.createlookat(new vector3(0, 5, 5),
new vector3(0, 0, 0),
new vector3(0, 1, 0));
使用一些靜態vector3屬性,這個**就可以變得更可讀些。
matrix view = matrix.createlookat(new vector3(0, 5, 5), vector3.zero, vector3.up);
注意:不要忘了靠近和遠離剪輯平面中已定義的可視區域。如果你移動相機足夠接近或足夠遠離不屬於這些剪輯平面的物件,它將從視角中消失。
這也也可以使用矩陣操作來設定相機位置,就像在我們的場景中我們為物件所做的。我們將看到在下乙個部分如何去做。
攝像機標定
利用攝像機所拍攝到的影象來還原空間中的物體。在這裡,不妨假設攝像機所拍攝到的影象與三維空間中的物體之間存在以下一種簡單的線性關係 像 m 物 這裡,矩陣m可以看成是攝像機成像的幾何模型。m中的引數就是攝像機引數。通常,這些引數是要通過實驗與計算來得到的。這個求解引數的過程就稱為攝像機標定。中文名 攝...
監視攝像機
時間限制 1 sec 記憶體限制 32 mb 題目描述 乙個著名的倉庫管理公司 erkoi請你的公司為其安裝一套閉路監視系統。由於 serkoi財力有限,每個房間只能安裝一台攝像機作監視用,不過它的鏡頭可以向任意方向旋轉。房間用乙個封閉的多邊形表示,一條邊表示一面牆。輸入 輸入檔案包含乙個或多個房間...
攝像機標定
攝像機鏡頭的畸變 由於攝像機光學系統並不是精確地按理想化的小孔成像原理工作,存在有透鏡畸 變,物體點在攝像機成像面上實際所成的像與理想成像之間存在有光學畸變誤差。主要的畸變誤差分為三類 徑向畸變 偏心畸變和薄稜鏡畸變。第一類只產生徑向 位置的偏差,後兩類則既產生徑向偏差,又產生切向偏差,下圖2 為無...