3.vtkProp 和vtkProp3D

文章目錄

  • 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;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75743.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ZYNQ Linux移植】2-獲取設備樹

0 寫在前面 這是一個系列博客&#xff0c;詳細介紹如何在 ZYNQ 與 ZYNQ MP 平臺上如何移植 Linux 系統。目前網絡上的大部分教程都是全程基于 Petalinux 的開發&#xff0c;雖然這樣簡化了開發流程&#xff0c;但對于初學者深入理解掌握 Linux 是不利的&#xff0c;所以&#x…

基礎算法篇(5)(藍橋杯常考點)—動態規劃(C/C++)

文章目錄 動態規劃前言線性dp路徑類dp經典線性dp背包問題分類01背包問題完全背包問題多重背包分組背包問題混合背包問題多維費用的背包問題區間dp 動態規劃 前言 在競賽中&#xff0c;如果遇到動態規劃的題目&#xff0c;只要不是經典題型&#xff0c;那么大概率就是以壓軸題的…

obsidian寫文章的圖床設置方法

目標 要達成的需求&#xff1a; 復制到obsidian的圖片&#xff0c;自動上傳到Picgo配置的圖床。可以自定義大小。可以一鍵下載當前文章的圖片到本地。 obsidian配置圖床 安裝并配置插件 image auto upload plugin&#xff0c;配置信息如下圖。 滾輪alt自定義大小 安裝并…

QPaintDevice繪圖設備

1.QPixmap 對不同平臺做了顯示的優化&#xff0c;可以將畫的圖保存到磁盤上 頭文件&#xff1a; #include"QPixmap" #include"QPainter" 1.1QPixmap畫圖 代碼&#xff1a; //Pixmap繪圖設備QPixmap pix(300,300);//聲明畫家QPainter painter(&pix…

數據結構有哪些類型(對于數據結構的簡述)

在學習計算機時&#xff0c;數據結構是不可忽視的一點&#xff0c;從考研時的408課程&#xff0c;再到工作中編寫軟件&#xff0c;網站&#xff0c;要想在計算機領域站住腳跟&#xff0c;數據結構是必備的 在這里&#xff0c;我對于數據結構進行了匯總&#xff0c;并簡要描述&…

L2TP實驗(無圖后補)

拓撲圖 一、搭建拓撲并配置基礎 IP 地址 設備選型與拓撲搭建&#xff1a;在 eNSP 中&#xff0c;拖入所需設備&#xff0c;包括 LAC&#xff08;L2TP Access Concentrator&#xff0c;L2TP 接入集中器 &#xff09;、LNS&#xff08;L2TP Network Server&#xff0c;L2TP 網絡服…

【C#】CAN通信的使用

在C#中實現CAN通信通常需要借助第三方庫或硬件設備的驅動程序&#xff0c;因為C#本身并沒有直接內置支持CAN通信的功能。以下是一個關于如何使用C#實現CAN通信的基本指南&#xff0c;包括所需的步驟和常用工具。 1. 硬件準備 要進行CAN通信&#xff0c;首先需要一個支持CAN協…

02_C++入門案例習題while循環練習案例:猜數字

案例描述&#xff1a;系統隨機生成一個1到100之間的數字&#xff0c;玩家進行猜測&#xff0c;如果猜錯&#xff0c;提示玩家數字過大或過小&#xff0c;如果猜對恭喜玩家勝利&#xff0c;并且退出游戲。 需要引入隨機數種子 #include <cstdlib> #include <ctime>…

深入理解哈希沖突:原理、解決方案及 Java 實踐

概述&#xff1a;在計算機科學領域&#xff0c;哈希表是一種非常重要的數據結構&#xff0c;它通過哈希函數將鍵映射到存儲桶中&#xff0c;從而實現快速的數據查找、插入和刪除操作。然而&#xff0c;哈希表在實際應用中會面臨 哈希沖突的問題。本文將深入探討哈希沖突的原理、…

opencv(C++)處理圖像顏色

文章目錄 介紹使用策略設計模式比較顏色實現方案計算兩個顏色向量之間的距離1. 簡單方法&#xff1a;曼哈頓距離計算&#xff08;Manhattan Distance&#xff09;2.使用 OpenCV 的 cv::norm 函數3.使用 OpenCV 的 cv::absdiff 函數錯誤示例 使用 OpenCV 函數實現顏色檢測實現方…

DOM解析XML:Java程序員的“樂高積木式“數據搭建

各位代碼建筑師們&#xff01;今天我們要玩一個把XML變成內存樂高城堡的游戲——DOM解析&#xff01;和SAX那種"邊看監控邊破案"的刺激不同&#xff0c;DOM就像把整個樂高說明書一次性倒進大腦&#xff0c;然后慢慢拼裝&#xff08;內存&#xff1a;你不要過來啊&…

Apache Nifi安裝與嘗試

Apache NIFI中文文檔 地址&#xff1a;https://nifichina.github.io/ 下載安裝配置 1、環境準備 Nifi的運行需要依賴于java環境&#xff0c;所以本機上需要安裝java環境&#xff0c;并配置環境變量。 1.1查看本機是否已經存在java環境 請先執行以下命令找出系統中真實可用…

我可能用到的網站和軟件

我可能用到的網站和軟件 程序員交流的網站代碼管理工具前端組件庫前端框架在線工具人工智能問答工具學習的網站Windows系統電腦的常用工具 程序員交流的網站 csdn博客博客園 - 開發者的網上家園InfoQ - 軟件開發及相關領域-極客邦掘金 (juejin.cn) 代碼管理工具 GitHub 有時…

使用SSH解決在IDEA中Push出現403的問題

錯誤截圖&#xff1a; 控制臺日志&#xff1a; 12:15:34.649: [xxx] git -c core.quotepathfalse -c log.showSignaturefalse push --progress --porcelain master refs/heads/master:master fatal: unable to access https://github.com/xxx.git/: The requested URL return…

JavaScript異常機制與嚴格模式

目錄 JavaScript 異常機制 1. 基本語法&#xff1a;try...catch...finally 2. 拋出異常&#xff1a;throw 3. 錯誤對象屬性 4. 同步代碼的異常處理 5. 異步代碼的異常處理 5.1 回調函數 5.2 Promise 5.3 全局未捕獲的 Promise 錯誤 6. 全局錯誤處理 7. 自定義錯誤與…

中廠算法崗面試總結

時間&#xff1a;2025.4.10 地點&#xff1a;上市的電子有限公司 面試流程&#xff1a; 1.由負責人講解公司文化 2&#xff0c;由技術人員講解公司的技術崗位&#xff0c;還有成果 3.帶領參觀各個工作位置&#xff0c;還有場所 4.中午吃飯 5.面試題&#xff0c;閉卷考試…

vue+flask圖書知識圖譜推薦系統

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站&#xff0c;有好處&#xff01; 編號: F025 架構: vueflaskneo4jmysql 亮點&#xff1a;協同過濾推薦算法知識圖譜可視化 支持爬取圖書數據&#xff0c;數據超過萬條&am…

MySQL NDB Cluster詳解

MySQL NDB Cluster&#xff08;MNC&#xff09; 是MySQL提供的一種分布式數據庫解決方案&#xff0c;旨在提供高可用性、高性能的數據庫服務。它通過 NDB&#xff08;Network DataBase&#xff09; 存儲引擎實現了高可用性和分布式存儲&#xff0c;在NDB中&#xff0c;數據通過…

解決華碩主板Z890m下載ubuntu20.04后沒有以太網問題

問題描述&#xff1a; 華碩主板Z890m下載雙系統ubuntu20.04后&#xff0c;發現ubuntu不能打開以太網。 問題原因&#xff1a; 華碩主板的網卡驅動是r8125,而ubuntu20.04的驅動版本是r8169&#xff0c;所以是網卡驅動不匹配造成 解決方案 開機界面按下F2進入BOIS模式&#…

JS里對于集合的簡單介紹

JS的集合 前言一、集合二、基本使用1. 創建集合2. 添加元素3. 刪除元素4. 檢查元素5. 清空集合6. 集合的大小 三、擴展使用1. 遍歷集合2. 從數組創建集合3. 集合的應用場景 四、總結 前言 JS里對于集合的簡單介紹 同數學的集合&#xff0c;有無序性、唯一性 注意&#xff1a;…