文章目錄
- vtkProp 和vtkProp3D
- 使用vtkProp3D
- 使用vtkPro
vtkProp 和vtkProp3D
vtkProp 和 vtkProp3D 都是VTK(Visualization Toolkit)庫中的類,它們用于在渲染場景中表示可視化元素。理解這兩個類的區別和用途對于有效地使用VTK進行三維數據可視化非常重要。
vtkProp: 這是一個抽象類,它定義了所有可視對象的基本屬性和行為。vtkProp 是任何可以被放置到渲染器(vtkRenderer)中的對象的基類。這些對象包括幾何體、注釋、2D覆蓋等。簡而言之,vtkProp 是一個能夠在渲染窗口中顯示的對象。
vtkProp3D: 這個類是 vtkProp 的直接子類之一,專門用于表示三維空間中的對象。vtkProp3D 提供了位置、方向、縮放等屬性的控制方法,允許用戶對三維對象進行精確的操作。例如,你可以通過設置變換矩陣來移動、旋轉或縮放一個 vtkProp3D 對象。具體來說,如果你有一個需要在三維空間內進行變換(如移動、旋轉)的對象,你可能會使用 vtkProp3D 或其派生類(如
vtkActor)。而 vtkProp 則更為通用,適用于不需要進行三維變換的場景,比如一些2D覆蓋或者文本標注。在實際應用中,最常用的是 vtkProp3D 的派生類,比如 vtkActor,它代表了一個帶有幾何數據(由 vtkMapper
映射的數據)、屬性(顏色、透明度等)、變換(位置、方向、縮放)的實體,可以在三維空間中被渲染。
使用vtkProp3D
#include <iostream>
#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 <vtkProperty.h>
#include <vtkAutoInit.h>
#include <vtkSphereSource.h>
#include <vtkLineSource.h>
#include <vtkPlaneSource.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);int main() {// 1. 創建一個球體的幾何數據源vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetCenter(0.0, 0.0, 0.0); // 設置球體中心sphereSource->SetRadius(1.0); // 設置球體半徑// 2. 創建一個映射器 (Mapper)vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(sphereSource->GetOutputPort());// 3. 創建一個演員 (Actor)vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);// 使用 vtkProp3D 的方法設置位置、旋轉和縮放actor->SetPosition(0.0, 0.0, 0.0); // 設置位置actor->RotateX(45.0); // 繞 X 軸旋轉 45 度actor->RotateY(30.0); // 繞 Y 軸旋轉 30 度actor->SetScale(1.5, 1.5, 1.5); // 縮放比例// 4. 創建一個渲染器 (Renderer)vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor); // 將演員添加到渲染器中renderer->SetBackground(0.1, 0.2, 0.4); // 設置背景顏色 (RGB)// 5. 創建一個渲染窗口 (Render Window)vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);renderWindow->SetSize(800, 600); // 設置窗口大小// 6. 創建一個交互器 (Interactor)vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 7. 初始化交互器并啟動渲染循環renderWindow->Render();interactor->Start();return 0;
}
使用vtkPro
#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkSphereSource.h>
#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);int main() {// 1. 創建一個球體的幾何數據源vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New();sphereSource->SetCenter(0.0, 0.0, 0.0); // 設置球體中心sphereSource->SetRadius(1.0); // 設置球體半徑// 2. 創建一個映射器 (Mapper)vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(sphereSource->GetOutputPort());// 3. 創建一個演員 (Actor)vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);// 使用 vtkProp3D 的方法設置位置、旋轉和縮放actor->SetPosition(0.0, 0.0, 0.0); // 設置位置actor->RotateX(45.0); // 繞 X 軸旋轉 45 度actor->RotateY(30.0); // 繞 Y 軸旋轉 30 度actor->SetScale(1.5, 1.5, 1.5); // 縮放比例// 4. 將 vtkActor 轉換為 vtkProp 類型vtkProp* prop = actor; // vtkActor 是 vtkProp 的子類,因此可以向上轉型// 5. 創建一個渲染器 (Renderer)vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();renderer->AddActor(actor); // 將演員添加到渲染器中renderer->SetBackground(0.1, 0.2, 0.4); // 設置背景顏色 (RGB)// 6. 創建一個渲染窗口 (Render Window)vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->AddRenderer(renderer);renderWindow->SetSize(800, 600); // 設置窗口大小// 7. 創建一個交互器 (Interactor)vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renderWindow);// 8. 初始化交互器并啟動渲染循環renderWindow->Render();interactor->Start();return 0;
}