日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VTK修炼之道7_三维场景基本要素:光照

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VTK修炼之道7_三维场景基本要素:光照 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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.光照實驗


#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL); / #include <vtkSmartPointer.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkInteractorStyleTrackballCamera.h> #include <vtkCylinderSource.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkLight.h> #include <vtkCamera.h> #include <vtkProperty.h>int main() {vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();cylinder->SetHeight( 3.0 );cylinder->SetRadius( 1.0 );cylinder->SetResolution( 10 ); vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection( cylinder->GetOutputPort() ); vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper( cylinderMapper );vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor( cylinderActor );renderer->SetBackground( 1.0, 0, 0 );vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer( renderer );renWin->SetSize( 640, 480 );renWin->Render();renWin->SetWindowName("RenderCylinder-Lights");vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();iren->SetRenderWindow(renWin);vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();iren->SetInteractorStyle(style);vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();myLight->SetColor(0,1,0);myLight->SetPosition(0,0,6);myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());renderer->AddLight(myLight);vtkSmartPointer<vtkLight> myLight2 =vtkSmartPointer<vtkLight>::New();myLight2->SetColor(0,0,1);myLight2->SetPosition(0,0,-6);myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());renderer->AddLight(myLight2);iren->Initialize();iren->Start();return EXIT_SUCCESS;}

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。