您好,登錄后才能下訂單哦!
VTK中常用控件介紹及如何實現圓錐體繪制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
利用 VTK 進行繪制物體時,常用到的組件有下面幾種,為了加深理解,VTK 把一個物體的渲染過程比喻成了一場演出(真的很形象):
vtkRenderWindow
: 繪制窗口,相當于用于表演的舞臺場地;
vtkRenderer
— 涉及燈光,相機,actor 的繪制過程;相當于舞臺上的整體表演效果;
vtkLight
— 燈源用于照明場景;
vtkCamera
— 定義視角,焦距,及場景的視覺屬性,相當于觀眾的視野范圍;
vtkActor
— 場景中渲染的對象,屬性以及它在場景中的位置,繪制中展示的道具;相當于演出的演員和道具;
vtkProperty
修飾 vtkActor
的屬性,包括顏色、透明度及燈光的屬性(反射、折射效果),演出用到的燈光
vtkMapper
— vtkActor
的幾何映射,繪制時需要把 vtkAcor
轉化為幾何屬性才能進行繪制;多個 vtkActor
可以設置相同的 mapper
下圖是對 VTK 在繪制效果中對各組件的標注:
進行物體繪制時,需要先提供源數據,對數據進行一系列操作(讀取、格式轉換、Filter圖像處理),再轉化為vtkMapper
,vtkActor
進行設置`vtkMapper
后,傳入vtkRendener (
繪制器)中。
在進行代碼實現時,如果沒有定義vtkLight、vtkCamera
兩個組件時,程序會自動創建這兩個組件。
整體來說,VTK 的數據管道流向如下:
下面就利用代碼來實現一個圓錐體的繪制,借助于 VTK 提供的一個類 vtkConeSource.h
#include<vtkActor.h>
#include<vtkSmartPointer.h>
#include<vtkPolyDataMapper.h>
#include<vtkConeSource.h>
#include<vtkRenderer.h>
#include<vtkRenderWindow.h>
#include<vtkCamera.h>
#include<vtkNamedColors.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2); // VTK was built with vtkRenderingOpenGL2
VTK_MODULE_INIT(vtkInteractionStyle);
int main()
{
vtkSmartPointer<vtkConeSource> Cone = vtkSmartPointer<vtkConeSource>::New();
vtkSmartPointer<vtkNamedColors> colors = vtkSmartPointer<vtkNamedColors>::New();
Cone->SetHeight(3.0);//Cone Height
Cone->SetRadius(1.0);//Cone Radius
Cone->SetResolution(9);//Cone faces
vtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
coneMapper->SetInputConnection(Cone->GetOutputPort());//Mapper data
vtkSmartPointer<vtkActor> coneActor = vtkSmartPointer<vtkActor>::New();
coneActor->SetMapper(coneMapper);
vtkSmartPointer<vtkRenderer> coneRender = vtkSmartPointer<vtkRenderer>::New();
coneRender->AddActor(coneActor);
coneRender->SetBackground(colors->GetColor3d("MidnightBlue").GetData());//Bachground color
vtkSmartPointer<vtkRenderWindow> renWindow = vtkSmartPointer<vtkRenderWindow>::New();
renWindow->AddRenderer(coneRender);
renWindow->SetSize(300, 300);//Size of Window;
for (auto i = 0; i < 360; ++i)
{
//render the image;
renWindow->Render();
//rotate the active camera by one degree
coneRender->GetActiveCamera()->Azimuth(1);
}
getchar();
return EXIT_SUCCESS;
}
最終的效果如下:
代碼中對圓錐設置了幾個參數:高度,底部半徑,及包含面的個數(圓錐涉及的面的總個數);
VTK 除了頭文件 vtkConeSource.h
提供圓錐數據以外,還有橢圓,正方體,圓環等數據對象。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。