vtk對 camera 的操作方法如下

2021-07-25 18:20:37 字數 1948 閱讀 6896

對 camera 的操作方法如下: 

vtkcamera *acamera = vtkcamera::new(); 

acamera->setviewup (0, 0, -1);//設視角位置 

acamera->setposition (0, 1, 0);//設觀察物件位

acamera->setfocalpoint (0, 0, 0);//設焦點 

acamera->computeviewplanenormal();//自動

arenderer->setactivecamera(acamera);

1.setclippingplane

設定相機照攝方向的最近端和最遠端切片距離。感覺引數像是平行光投影到體資料上前面一片和最後一片的位置資訊。(世界座標系表示)渲染時好像把平面外的資料剪掉了。

2.setfocalpoint /setposition

(世界座標系),控制相機距離。

3.computeviewplanenormal

重置視平面法向,基於當前的位置和焦點。否則會出現斜推剪下效果。

4.setviewup

設定攝像機的向上的方向。

5.zoom

通過改變視角的方法放大物件。

6.setviewangle

設定攝像機的視角,預設角度為30度,如果為平行投影則該角度無效。

通常完美視角計算=2*atan((h/2)/d) ,h是renderwindow的高度,d是眼睛到螢幕的距離。

orthogonalizeviewup()--設定正交角度。

7.修改攝像機位置

設定好焦點後通過azimuth()修改方位角和elevation()修改攝像機位置。使攝像機圍繞焦點在球形緯度上運動。例子:

azimuth(150)//表示 camera 的視點位置沿順時針旋轉 150 度角 

elevation(60)// 表示 camera 的視點位置沿向上的方面旋轉 60 度角

初始化相機

vtkcamera* cam1 = vtkcamera::new();

cam1->setclippingrange(0.0475572, 2.337786); 

//引數分別為沿著視向的近、遠剪下面的距離

cam1->setfocalpoint(0.052665, -0.129454, -0.0573973); 

//焦點:世界座標系,控制相機方向

cam1->setposition(0.327637, -0.116299, -0.256418); 

//位置:世界座標系,設定相機位置

cam1->computeviewplanenormal(); 

//重置視平面法向,基於當前的位置和焦點。否則會出現斜推剪下效果

cam1->setviewup(-0.0225386, 0.999137, 0.034901); 

//設定相機的「上」方向

ren1->setactivecamera(cam1); 

//設定渲染器的相機

設定已有的相機

cam1 = ren1->getactivecamera(); 

//獲取渲染器的相機

cam1->zoom(1.4); 

//放大相機,通過改變視角(setviewangle()),

另外,也可以使用dolly()方法沿著視平面法向移動相機,實現放大或縮小可見角色物體。

基於焦點,使用azimuth()和elevation()方法設定相機的方位角和高度角/仰角(度,degree)[球座標系統]。

注意其中在南極和北極存在奇異點,即視向量平行於視平面法向。此時可以使用orthogonalizeviewup()方法強制其正交。但這會改變相機座標系統。

正交投影vs透視投影

vtkcamera::parallelprojectionon()開啟平行/正交投影。此時需通過setparallelscale()方法控制角色物體的縮放。zoom不再有效。

oracle update 操作方法介紹與對比

update table name set col name where col name 例如 update table1 set name 小三 where id 11 update select.set col name 注 只是將 標準語法中確定的表變成了 通過select 語句查詢到的乙個...

Delphi對INI檔案的詳細操作方法

ini檔案在系統配置及應用程式引數儲存與設定方面,具有很重要的作用,delphi為我們提供了乙個tinifile類,以便我們可以非常靈活的處理ini檔案。一 ini檔案的結構 注釋語句 小節名1 關鍵字1 值1 關鍵子2 值2 小節名2 關鍵字1 值1 關鍵子2 值2 ini檔案允許有多個小節,每個...

陣列的操作方法

array系統內建物件 乙個資料的集合 有個length屬性代表陣列的長度 可以改變 以數字為索引,索引從0開始到length 1結束 操作方法 1,給陣列尾部新增資料 資料.push 元素1,元素2.引數 要新增的資料,可以是乙個也可以是多個 返回值 返回新增陣列的長度,原陣列改變,變成新增後的陣...