Viewport3D中的攝像機(一)

2022-03-20 12:12:05 字數 1545 閱讀 3816

在三維場景裡,camera是不可或缺的元素。和人的眼睛一樣,場景中現實的內容,實際上是camera「看到」的。

下圖是在google sketchup裡,left視角的camera所「看到」的內容:

和常見三維建模軟體類似,在wpf的3d裡,也涉及到camera物件,在wpf裡,有三種camera:

matrixcamera

perspectivecamera

orthographiccamera

上述三種camera中,perspectivecamera和orthographiccamera屬於投影攝像機,它將三維空間裡的物體,投影到乙個平面上,而這的不同之處在於,orthographiccamera採用正投影,而perspectivecamera採用透視投影,如下圖所示:

因此,這兩種攝像機除了具有投影攝像機的公共屬性外,還分別具備各自的熟悉,對於orthographiccamera,屬性width表明了攝像機取景框的寬度;對於perspectivecamera,fieldofview表示該攝像機的水平視角。這兩個屬性,下文將介紹。

和場景中的其他物品一樣,攝像機也具備position屬性,表示攝像機在場景的具體位置;lookdirection則表示攝像機「看的」方向;而updirection同樣是乙個向量,表示攝像機頂部的方向。

例如,假設我們的眼睛是乙個攝像機,那麼,眼睛所在的位置(對應原點)就是position,眼睛所看的方向,例如西北水平方向(用向量表示為-1,0,-1)為camera的lookdirection,眼睛的頂部(也就是我們的頭,用向量表示為0,1,0)為camera的updirection。

當我們移動時,position方向發生改變;當我們轉身時,lookdirection發生改變;當我們抬頭時,除了lookdirection,updirection也相應地改變成頭頂所指的方向了。

nearplanedistance表示camera的近端裁減,相當於camera的盲區,當camera和三維物品的距離小於這個值時,就不顯示了;farplanedistance和nearplanedistance相反,當camera和三維物品的距離大於farplanedistance時,就不顯示。

nearplanedistance的預設值為0.125,farplanedistance預設值為無窮遠,一般的,不需要修改這兩個值。

width屬性是orthographiccamera所特有的,相當於相機的取景框,width的值越大,相機能看到的東西就越多,而顯示在三維場景裡的內容就越小。下圖展示了同樣位置的orthographiccamera,由於width不同,相同大小的場景中顯示的內容及大小的不同。

fieldofview是perspectivecamera的特有屬性,用來表示相機的視角。如上圖所示,紅色、藍色的線代表不同的視角可視範圍。其中紅線代表的視角大小為α,投影螢幕離鏡頭的長度為f、場景空間在投影螢幕上投影的大小為d(上圖中,物體的大小恰好等於紅色視角的可是範圍),則有d=2ftg(α/2)。可見,場景的投影大小和相機的視角有成正比,進而可以推出,場景中的物品在同樣大小的投影螢幕上投影的大小和相機的視角成反比,即相機的視角越大,能看到的場景也越大,相應的,場景中的物品越小。

人眼的視角一般為53度。

Viewport3D中的攝像機

在三維場景裡,camera是不可或缺的元素。和人的眼睛一樣,場景中現實的內容,實際上是camera 看到 的。下圖是在google sketchup裡,left視角的camera所 看到 的內容 和常見三維建模軟體類似,在wpf的3d裡,也涉及到camera物件,在wpf裡,有三種camera ma...

Viewport3D中的攝像機(二 攝像機動作)

前文介紹了viewport3d中的兩種攝像機 orthographiccamera和perspectivecamera。在3d場景裡漫遊,最主要的工作就是針對使用者輸入 例如滑鼠左右移動 鍵盤按下a w s d等鍵 來改變攝像機的位置 方向。本文接下來介紹如何通過改變perspectivecamer...

Viewport3D中的攝像機(二 攝像機動作)

前文 介紹了viewport3d中的兩種攝像機 orthographiccamera和perspectivecamera。在3d場景裡漫遊,最主要的工作就是針對使用者輸入 例如滑鼠左右移動 鍵盤按下a w s d等鍵 來改變攝像機的位置 方向。本文接下來介紹如何通過改變perspectivecame...