溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

VTK中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制

發(fā)布時間:2021-11-15 15:18:03 來源:億速云 閱讀:150 作者:柒染 欄目:大數(shù)據(jù)

VTK中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。


利用 VTK 進(jìn)行繪制物體時,常用到的組件有下面幾種,為了加深理解,VTK 把一個物體的渲染過程比喻成了一場演出(真的很形象):

  • vtkRenderWindow : 繪制窗口,相當(dāng)于用于表演的舞臺場地;

  • vtkRenderer — 涉及燈光,相機(jī),actor 的繪制過程;相當(dāng)于舞臺上的整體表演效果;

  • vtkLight — 燈源用于照明場景;

  • vtkCamera — 定義視角,焦距,及場景的視覺屬性,相當(dāng)于觀眾的視野范圍;

  • vtkActor — 場景中渲染的對象,屬性以及它在場景中的位置,繪制中展示的道具;相當(dāng)于演出的演員和道具;

  • vtkProperty 修飾 vtkActor 的屬性,包括顏色、透明度及燈光的屬性(反射、折射效果),演出用到的燈光

  • vtkMappervtkActor 的幾何映射,繪制時需要把 vtkAcor 轉(zhuǎn)化為幾何屬性才能進(jìn)行繪制;多個 vtkActor 可以設(shè)置相同的 mapper

下圖是對 VTK 在繪制效果中對各組件的標(biāo)注:

VTK中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制  

進(jìn)行物體繪制時,需要先提供源數(shù)據(jù),對數(shù)據(jù)進(jìn)行一系列操作(讀取、格式轉(zhuǎn)換、Filter圖像處理),再轉(zhuǎn)化為vtkMappervtkActor 進(jìn)行設(shè)置`vtkMapper 后,傳入vtkRendener (繪制器)中。

在進(jìn)行代碼實(shí)現(xiàn)時,如果沒有定義vtkLight、vtkCamera 兩個組件時,程序會自動創(chuàng)建這兩個組件。

整體來說,VTK 的數(shù)據(jù)管道流向如下:

VTK中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制  

下面就利用代碼來實(shí)現(xiàn)一個圓錐體的繪制,借助于 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中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制  

代碼中對圓錐設(shè)置了幾個參數(shù):高度,底部半徑,及包含面的個數(shù)(圓錐涉及的面的總個數(shù));

VTK 除了頭文件 vtkConeSource.h 提供圓錐數(shù)據(jù)以外,還有橢圓,正方體,圓環(huán)等數(shù)據(jù)對象。

VTK中常用控件介紹及如何實(shí)現(xiàn)圓錐體繪制  

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vtk
AI