VTK修炼之道7_三维场景基本要素:光照
1.VTK中的光照長得什么樣?
劇場里有各式各樣的燈光,三維渲染場景中也一樣,可以有多個光照存在。光照和相機是三維渲染場景必備的因素,如果沒有指定,vtkRenderer會自動地創(chuàng)建默認的光照和相機。VTK里用類vtkLight來表示渲染場景中的光照。與現(xiàn)實中的燈光類似,VTK中的vtkLight實例也可以打開、關(guān)閉,設(shè)置光照的顏色,照射位置(即焦點),光照所在的位置,強度等等。
vtkLight可以分為位置光照(Positional Light,即聚光燈)和方向光照(Direction Light)。位置光照是光源位置在渲染場景中的某個位置,可以指定光照的衰減值、錐角等;方向光照即光源位置在無窮遠,光線可以認為是平行的,比如自然界中的太陽光。光源的位置和焦點的連線定義光線的方向,默認的vtkLight即為方向光照。
vtkLight常的方法有:
SetColor() — 設(shè)置光照的顏色,以RGB的形式指定顏色。
SetPosition() — 設(shè)置光照位置。
SetFocalPoint() — 設(shè)置光照焦點。
SetIntensity() — 設(shè)置光照的強度。
SetSwitch() / SwitchOn()/ SwitchOff()— 打開或關(guān)閉對應(yīng)的光照。
vtkLight里也有類似命名風(fēng)格的方法:SetSwitch() /GetSwitch()/SwitchOn()/ SwitchOff()。不難發(fā)現(xiàn),在VTK里,某個屬性的設(shè)置都是采取這一類方法,以vtkLight為例,SwitchOn()跟SetSwitch(1)實現(xiàn)的效果是一樣,SwitchOff()則與SetSwitch(0)是一樣的,GetSwitch()則是用于獲取vtkLight對象關(guān)閉或打開這個屬性的值。如果某個類有提供SetXXX()方法,一般也會提供GetXXX()方法來獲取相應(yīng)的值,這個我們在前面的內(nèi)容也已經(jīng)有一些了解。再比如,vtkLight還提供:SetPositional() / GetPositional()/ PositionalOn()/PositionalOff()一類方法來設(shè)置位置光照。
在類vtkLight的頭文件vtkLight.h里,找不到類似SetSwitch()/GetSwitch()等方法的原型,但是可以看到以下幾行:
vtkSetMacro(Switch,int);
vtkGetMacro(Switch,int);
vtkBooleanMacro(Switch,int);
顧名思義,vtkSetMacro/vtkGetMacro/vtkBooleanMacro都是宏,展開這幾個宏以后就是以上函數(shù)的原型。為了保證代碼的整潔與復(fù)用性,VTK在文件vtkSetGet.h里定義了大量了宏,當你找不到某個函數(shù)的原型時,可能這些函數(shù)就是由宏展開以后所定義的,所以,在閱讀VTK源碼的時候,不妨多右擊一下某個函數(shù)或者關(guān)鍵字,然后點擊彈出菜單中的“Go to Definition…”,也就一目了然了。
2.光照實驗
3.運行結(jié)果
4.經(jīng)驗總結(jié)
1.當我們設(shè)置舞臺上的光照參數(shù)時,要用到照相機Camera信息以及屬性Property信息。因此頭文件中不僅僅要包括#include<vtkLight.h>必須包括#include<vtkCamera.h>/#include<vtkProperty.h>。
2.我們設(shè)計的是燈光位置,通過一組實驗我們大概可以知曉vtk視窗內(nèi),XYZ軸的指向。
????
圖一:(-6,0,0)=藍光燈;(6,0,0)=綠光燈。 ?X軸
圖二:(0,-6,0)=藍光燈;(0,6,0)=綠光燈。 ?Y軸
圖三:(0,0,-6)=藍光燈;(0,0,6)=綠光燈。 ?Z軸
總結(jié)
以上是生活随笔為你收集整理的VTK修炼之道7_三维场景基本要素:光照的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PIC单片机精通_ADC左对齐与右对齐的
- 下一篇: 评测称IE8成内存消耗王 高出IE7一半