(35)VTK C++開發示例 ---將圖片映射到平面2

文章目錄

    • 1. 概述
    • 2. CMake鏈接VTK
    • 3. main.cpp文件
    • 4. 演示效果


更多精彩內容
👉內容導航 👈
👉VTK開發 👈

1. 概述

與上一個示例不同的是,使用vtkImageReader2Factory根據文件擴展名或內容自動創建對應的圖像文件讀取器,讀取不同后綴的圖片。

功能總結:

  1. 圖像加載

    • 使用 vtkImageReader2Factory 根據文件擴展名或內容自動創建合適的圖像讀取器。
    • 加載指定路徑的圖像文件(如 code.pngwintersun.jpg)。
  2. 紋理設置

    • 將加載的圖像設置為紋理,并啟用插值以使紋理更加平滑。
  3. 平面創建

    • 創建一個平面幾何體,并設置其中心和法向量。
  4. 紋理映射

    • 使用 vtkPolyDataMapper 將平面幾何體映射到渲染管線。
    • 將紋理應用到平面上。
  5. 渲染設置

    • 創建一個渲染器 (vtkRenderer),將平面(帶紋理)添加為演員 (vtkActor)。
    • 設置背景顏色為 SlateGray
  6. 窗口與交互

    • 創建渲染窗口 (vtkRenderWindow) 并設置大小。
    • 創建渲染窗口交互器 (vtkRenderWindowInteractor),允許用戶與渲染窗口交互。
  7. 渲染與交互啟動

    • 調用 Render() 方法進行渲染。
    • 調用 Start() 方法啟動交互。

    演示文件下載地址

環境說明
系統ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
編譯器g++11.4、msvc2017
VTK9.4.1

2. CMake鏈接VTK

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 設置CMake最低版本
project(vtk2) # 設置項目名稱
# 查找VTK庫
find_package(VTK COMPONENTS 
CommonColor
CommonCore
FiltersSources
IOImage
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可執行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 鏈接VTK庫
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模塊

3. main.cpp文件

/********************************************************************************
* 文件名:   main.cpp
* 創建時間: 2025-03-22 20:31:57
* 開發者:   MHF
* 郵箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkImageReader2.h>
#include <vtkImageReader2Factory.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPlaneSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkTexture.h>using namespace std;int main()
{string fileName = "e:/lib/VTK/vtk-data/Data/code.png";// string fileName = "e:/lib/VTK/vtk-data/Data/wintersun.jpg";vtkNew<vtkImageReader2Factory> readerFactory; // 根據文件擴展名或內容自動創建對應的圖像文件讀取器vtkSmartPointer<vtkImageReader2> textureFile; // 紋理文件讀取器textureFile = readerFactory->CreateImageReader2(fileName.c_str());textureFile->SetFileName(fileName.c_str());textureFile->Update();vtkNew<vtkTexture> texture; // 紋理texture->SetInputConnection(textureFile->GetOutputPort());texture->InterpolateOn(); // 紋理插值,使紋理更加平滑vtkNew<vtkPlaneSource> plane; // 平面plane->SetCenter(0.0, 0.0, 0.0);plane->SetNormal(0.0, 0.0, 1.0); // 平面法向量vtkNew<vtkPolyDataMapper> mapper; // 映射器mapper->SetInputConnection(plane->GetOutputPort());vtkNew<vtkActor> actor; // 演員actor->SetMapper(mapper); // 設置映射器actor->SetTexture(texture); // 設置紋理vtkNew<vtkNamedColors> colors; // 顏色vtkNew<vtkRenderer> renderer; // 渲染器renderer->AddActor(actor); // 添加演員renderer->SetBackground(colors->GetColor3d("SlateGray").GetData()); // 設置背景顏色vtkNew<vtkRenderWindow> renderWindow; // 渲染窗口renderWindow->AddRenderer(renderer); // 添加渲染器renderWindow->SetSize(600, 600); // 設置窗口大小vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; // 渲染窗口交互器renderWindowInteractor->SetRenderWindow(renderWindow); // 設置渲染窗口renderWindow->Render(); // 渲染renderWindowInteractor->Start(); // 開始交互return 0;
}

4. 演示效果

在這里插入圖片描述



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

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

相關文章

【模型量化】量化基礎

目錄 一、認識量化 二、量化基礎原理 2.1 對稱量化和非對稱量化 2.1.1 對稱量化 2.1.2 非對稱量化 2.1.3 量化后的矩陣乘 2.2 神經網絡量化 2.2.1 動態量化 2.2.2 靜態量化 2.3 量化感知訓練 一、認識量化 量化的主要目的是節約顯存、提高計算效率以及加快通信 dee…

【零基礎入門】一篇掌握Python中的字典(創建、訪問、修改、字典方法)【詳細版】

?? 個人主頁:十二月的貓-CSDN博客 ?? 系列專欄: ??《PyTorch科研加速指南:即插即用式模塊開發》-CSDN博客 ???? 十二月的寒冬阻擋不了春天的腳步,十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 前言 2. 字典 2.1 字典的創建 2.1.1 大括號+直接賦值 2.1.2 大括號…

PHP-session

PHP中&#xff0c;session&#xff08;會話&#xff09;是一種在服務器上存儲用戶數據的方法&#xff0c;這些數據可以在多個頁面請求或訪問之間保持。Session提供了一種方式來跟蹤用戶狀態&#xff0c;比如登錄信息、購物車內容等。當用戶首次訪問網站時&#xff0c;服務器會創…

第 5 篇:紅黑樹:工程實踐中的平衡大師

上一篇我們探討了為何有序表需要“平衡”機制來保證 O(log N) 的穩定性能。現在&#xff0c;我們要認識一位在實際工程中應用最廣泛、久經考驗的“平衡大師”——紅黑樹 (Red-Black Tree)。 如果你用過 Java 的 TreeMap? 或 TreeSet?&#xff0c;或者 C STL 中的 map? 或 s…

第十六屆藍橋杯 2025 C/C++組 客流量上限

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 打表找規律&#xff1a; 核心思路&#xff1a; 思路詳解&#xff1a; 得到答案的方式&#xff1a; 按計算器&#xff1a; 暴力求解代碼&#xff1a; 快速冪代碼&#xff1a; 位運…

一天學完JDBC!!(萬字總結)

文章目錄 JDBC是什么 1、環境搭建 && 入門案例2、核心API理解①、注冊驅動(Driver類)②、Connection③、statement(sql注入)④、PreparedStatement⑤、ResultSet 3、jdbc擴展(ORM、批量操作)①、實體類和ORM②、批量操作 4. 連接池①、常用連接池②、Durid連接池③、Hi…

從原理到實戰講解回歸算法!!!

哈嘍&#xff0c;大家好&#xff0c;我是我不是小upper, 今天系統梳理了線性回歸的核心知識&#xff0c;從模型的基本原理、參數估計方法&#xff0c;到模型評估指標與實際應用場景&#xff0c;幫助大家深入理解這一經典的機器學習算法&#xff0c;助力數據分析與預測工作。 …

【dify—10】工作流實戰——文生圖工具

目錄 一、創建工作流 應用 二、安裝硅基流動 三、配置硅基流動 四、API測試 &#xff08;1&#xff09;進入API文檔 &#xff08;2&#xff09;復制curl代碼 &#xff08;3&#xff09;Postman測試API 五、 建立文生圖工作流 &#xff08;1&#xff09;建立http請求 &…

Rust將結構導出到json如何處理小數點問題

簡述 標準的 serde_json 序列化器不支持直接對浮點數進行格式化限制。如果將浮點數轉換成字符串&#xff0c;又太low逼。這里重點推薦rust_decimal。 #[derive(Serialize)] pub struct StockTickRow {datetime: NaiveDateTime,code: String,name: String,#[serde(serialize_w…

openEuler 22.03 安裝 Redis 6.2.9,支持離線安裝

目錄 一、環境檢查1.1 必要環境檢查1.2 在線安裝&#xff08;有網絡&#xff09;1.3 離線安裝&#xff08;無網絡&#xff09; 二、下載Redis2.1 在線下載2.2 離線下載 三、安裝Redis四、配置Redis服務五、開機自啟服務六、開放防火墻端口七、常用命令 一、環境檢查 1.1 必要環…

MySQL基本查詢(二)

文章目錄 UpdateDelete插入查詢結果&#xff08;select insert&#xff09;聚合函數分組聚合統計 Update 1. 語法&#xff1a; set后面加列屬性或者表達式 UPDATE table_name SET column expr [, column expr …][WHERE …] [ORDER BY …] [LIMIT …] 案例 將孫悟空同學的…

Android Framework學習二:Activity創建及View繪制流程

文章目錄 Window繪制流程Window Manager Service&#xff08;WMS&#xff09;SurfaceSurfaceFlinger 安卓View層次結構ActivityPhoneWindowActivity與PhoneWindow兩者之間的關系ViewRootImplDecorViewDecorView 的作用DecorView 的結構總結 Activity創建流程View invalidate調用…

基于ssm的智慧養老平臺(全套)

一、系統架構 前端&#xff1a;jsp | js | jquery | css 后端&#xff1a;spring | springmvc | mybatis 環境&#xff1a;jdk1.8 | mysql | maven | tomcat 二、代碼及數據庫 三、功能介紹 01. 登錄 02. 管理員-主頁 03. 管理員-個人中心 04. 管理員-…

計算機視覺技術的發展歷程

計算機視覺技術的發展歷程可以分為以下幾個階段&#xff1a; 早期探索階段&#xff08;1960s-1980s&#xff09; 1960年代&#xff1a;計算機視覺的概念開始形成&#xff0c;研究者嘗試讓計算機識別和理解圖像&#xff0c;主要集中在基礎的圖像處理&#xff0c;如邊緣檢測和特…

2025五一杯B題五一杯數學建模思路代碼文章教學: 礦山數據處理問題

完整內容請看文章最下面的推廣群 問題1. 根據附件1中的數據和&#xff0c;建立數學模型&#xff0c;對數據A進行某種變換&#xff0c;使得變換后的結果與數據盡可能接近。計算變換后的結果與數據的誤差&#xff0c;并分析誤差的來源&#xff08;如數據噪聲、模型偏差等&#xf…

.NET 平臺詳解

什么是 .NET&#xff1f; .NET 是一個由微軟開發的跨平臺、開源的開發者平臺&#xff0c;用于構建多種類型的應用程序。它提供了一致的編程模型和豐富的類庫&#xff0c;支持多種編程語言&#xff08;如 C#、F#、Visual Basic&#xff09;。 .NET 的核心組成 運行時環境 CLR …

ICRA 2025 基于觸覺反饋的閉環分層控制框架——開放環境下通用門開啟的智能規劃與操作

在機器人領域&#xff0c;讓機器人在開放環境中與日常物品交互一直是個難題&#xff0c;其中開門任務極具挑戰性。門的設計、機械結構和推拉方式多種多樣&#xff0c;現有方法存在諸多局限。基于運動學的方法依賴已知門模型&#xff0c;面對未知門時難以發揮作用&#xff1b;幾…

阿里云服務遷移實戰: 07-其他服務遷移

概述 當完成了服務器、數據庫、IP、OSS等遷移后&#xff0c;剩下的就是其他服務了。 短信網關 短信模板只能一個個創建&#xff0c;不能批量操作。但是可以使用以下方式優化操作。 在原賬號導出模板列表 概述 當完成了服務器、數據庫、IP、OSS等遷移后&#xff0c;剩下的…

(六——下)RestAPI 毛子(Http resilience/Refit/游標分頁/異步大文件上傳)

文章目錄 項目地址一、Refit1.1 安裝需要的包1.2 創建接口IGitHubApi1.3 創建RefitGitHubService1. 實現接口2. 注冊服務 1.4 修改使用方法 二、Http resilience2.1 安裝所需要的包2.2 創建resilience pipeline簡單版2.3 創建全局的resilience處理1. 創建清理全局ResilienceHan…

leetcode 977. Squares of a Sorted Array

題目描述 雙指針法一 用right表示原數組中負數和非負數的分界線。 nums[0,right-1]的是負數&#xff0c;nums[right,nums.size()-1]是非負數。 然后用合并兩個有序數組的方法。合并即可。 class Solution { public:vector<int> sortedSquares(vector<int>&…