VTK 光照、顏色、相機、坐標系統及空間變換


1、vtkLight常的方法有:

SetColor() — 設置光照的顏色,以RGB的形式指定顏色。

SetPosition() — 設置光照位置。

SetFocalPoint() — 設置光照焦點。

SetIntensity() — 設置光照的強度。

SetSwitch() / SwitchOn()/ SwitchOff()— 打開或關閉對應的光照。

在基礎概念代碼中加入:

 1    vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();  2     myLight->SetColor(0, 1, 0);  3     myLight->SetPosition(0, 0, 1);  4     myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());  5     renderer->AddLight(myLight); //將光線照加入到渲染場景中
 6  
 7     vtkSmartPointer<vtkLight> myLight2 = vtkSmartPointer<vtkLight>::New();  8     myLight2->SetColor(0, 0, 1);       //設置光照顏色
 9     myLight2->SetPosition(0, 0, -1);   //設置光照位置
10     myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint()); 11     renderer->AddLight(myLight2);
運行后的結果:
問題:

為什么這個運行出來的結果是放大狀態,通過縮小才能看見這個圓柱體!

2、確定相機實際方向(相機的視圖)的有三個因素:相機位置、相機焦點和朝上方向。

vtkCamera定義了兩種投影方法,一種是正交投影(OrthographicProjection),也叫平行投影(Parallel Projection),即進入相機的光線與投影方向是平行的。另一種是透視投影(PerspectiveProjection),即所有的光線相交於一點。

l  視角:透視投影時需要指定相機的視角(View Angle),默認的視角大小為30º,可以用方法vtkCamera::SetViewAngle()設置。

控制相機運動的方法:vtkCamera::Dolly(),vtkCamera::Roll(),vtkCamera::Azimuth(),vtkCamera::Yaw(),

vtkCamera::Elevation(),vtkCamera::Pitch(),vtkCamera::Zoom()。

3、顏色

VTK采用RGB和HSV兩種顏色系統來描述顏色。vtkProperty::SetColor(r,g, b)采用的就是RGB顏色系統設置顏色屬性值。

HSV顏色系統同樣也是由三個分量來決定顏色,分別是:色相(Hue),是顏色的基本屬性,就是我們平常所說的顏色名稱,如紅色、黃色等;飽和度(Saturation),是指顏色的純度,其值越高則越純;值(Value,也就是強度Intensity或者亮度Bright),值為0通常表示的是黑色,值為1表示的是最亮的顏色。這三個分量的取值范圍也是0到1。類vtkLookupTable提供了HSV顏色系統設置的方法。

與顏色設置相關的VTK類除了vtkProperty,vtkLookupTable之外,還有vtkColorTransferFunction。vtkLookupTable和vtkColorTransferFunction都派生自vtkScalarsToColors。

4、坐標系統及空間變換

計算機圖形學里常用的坐標系統主要有四種,分別是:Model坐標系統、World坐標系統、View坐標系統和Display坐標系統,它們之間的關系如圖3.9所示。

在VTK里,Model坐標系統用得比較少,其他三種坐標系統經常使用。它們之間的變換則是由類vtkCoordinate進行管理的。

l  DISPLAY — X、Y軸的坐標取值為渲染窗口的像素值。坐標原點位於渲染窗口的左下角,這個對於VTK里所有的二維坐標系統都是一樣的,且VTK里的坐標系統都是采用右手坐標系。

l  NORMALIZEDDISPLAY — X、Y軸坐標取值范圍為[0, 1],跟DISPLAY一樣,也是定義在渲染窗口里的。

l  VIEWPORT— X、Y的坐標值定義在視口或者渲染器(Renderer)里。

l  NORMALIZEDVIEWPORT — X、Y坐標值定義在視口或渲染器里,取值范圍為[0, 1]。

l  VIEW— X、Y、Z坐標值定義在相機所在的坐標系統里,取值范圍為[-1, 1],Z值表示深度信息。

l  WORLD — X、Y、Z坐標值定義在世界坐標系統,參考圖3.9。

l  USERDEFINED— 用戶自定義坐標系統。

vtkCoordinate類提供的設置以上坐標系統的方法是:

SetCoordinateSystemToDisplay ()

SetCoordinateSystemToNormalizedDisplay ()

SetCoordinateSystemToViewport ()

SetCoordinateSystemToNormalizedViewport ()

SetCoordinateSystemToView ()

SetCoordinateSystemToWorld ()

三維到二維投影的方法包括:透視投影和正交投影兩種方法。

 


免責聲明!

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



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