(37)VTK C++開發示例 ---紋理地球

文章目錄

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


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

1. 概述

將圖片紋理貼到球體上,實現3D地球的效果。

該代碼使用了 VTK (Visualization Toolkit) 庫來創建一個紋理化的球體,并將其渲染到窗口中。以下是代碼的主要功能概述:

  1. 加載紋理圖像
    • 通過 vtkImageReader2Factory 和 vtkImageReader2 加載指定路徑的紋理圖像文件(如 earthmap2k.jpg)。
    • 將圖像數據傳遞給 vtkTexture 對象,用于生成紋理。
  2. 創建球體幾何體
    • 使用 vtkTexturedSphereSource 創建一個球體幾何體。
    • 設置球體的緯度和經度分辨率(SetPhiResolutionSetThetaResolution)。
  3. 紋理映射
    • 使用 vtkTransformTextureCoords 對球體的紋理坐標進行變換(目前未啟用平移功能)。
    • 將紋理映射到球體表面。
  4. 渲染設置
    • 創建 vtkPolyDataMapper 將幾何體數據映射為圖形數據。
    • 創建 vtkActor,將紋理和幾何體綁定到一起。
    • 創建 vtkRenderer,將演員(Actor)添加到渲染器中,并設置背景顏色為黑色。
  5. 窗口和交互
    • 創建 vtkRenderWindow,用于顯示渲染結果。
    • 創建 vtkRenderWindowInteractor,允許用戶與渲染窗口進行交互。
    • 設置窗口大小為 600x600,并命名為 “TexturedSphere”。
  6. 渲染與交互
    • 調用 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
FiltersTexture
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 22:05:38
* 開發者:   MHF
* 郵箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkImageReader.h>
#include <vtkImageReader2Factory.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkTexture.h>
#include <vtkTextureMapToSphere.h>
#include <vtkTexturedSphereSource.h>
#include <vtkTransformTextureCoords.h>
using namespace std;int main()
{// string fileName = "e:/lib/VTK/vtk-data/Data/earth.ppm";string fileName = "e:/lib/VTK/vtk-data/Data/earthmap2k.jpg";// string fileName = "e:/lib/VTK/vtk-data/Data/mercurymap.jpg";vtkNew<vtkTexturedSphereSource> sphere; //創建一個球體sphere->SetPhiResolution(100); //設置球體的緯度分辨率sphere->SetThetaResolution(100); //設置球體的經度分辨率vtkNew<vtkImageReader2Factory> readerFactory; //創建一個圖像讀取器工廠vtkSmartPointer<vtkImageReader2> reader; //創建一個圖像讀取器reader = readerFactory->CreateImageReader2(fileName.c_str()); //創建一個圖像讀取器reader->SetFileName(fileName.c_str()); //設置圖像文件名vtkNew<vtkTexture> texture; //創建一個紋理texture->SetInputConnection(reader->GetOutputPort()); //設置紋理的輸入連接texture->InterpolateOn(); //開啟紋理插值vtkNew<vtkTransformTextureCoords> transformTexture; //創建一個紋理坐標變換器transformTexture->SetInputConnection(sphere->GetOutputPort()); //設置輸入連接
#if 0// 設置紋理坐標在 U/V/W 三個方向上的平移量double translate[3] = {0, 0, 0.0};transformTexture->SetPosition(translate); //設置位置
#endifvtkNew<vtkPolyDataMapper>  mapper; //創建一個多邊形數據映射器mapper->SetInputConnection(transformTexture->GetOutputPort()); //設置輸入連接vtkNew<vtkActor> actor; //創建一個演員actor->SetMapper(mapper); //設置映射器actor->SetTexture(texture); //設置紋理vtkNew<vtkNamedColors> colors; //創建一個顏色vtkNew<vtkRenderer> renderer; //創建一個渲染器renderer->AddActor(actor); //添加演員renderer->SetBackground(colors->GetColor3d("Black").GetData()); //設置背景顏色vtkNew<vtkRenderWindow> renderWindow; //創建一個渲染窗口renderWindow->AddRenderer(renderer); //添加渲染器renderWindow->SetWindowName("TexturedSphere"); //設置窗口名稱renderWindow->SetSize(600, 600);vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; //創建一個渲染窗口交互器renderWindowInteractor->SetRenderWindow(renderWindow); //設置渲染窗口renderWindow->Render(); //渲染renderWindowInteractor->Start(); //開始交互return 0;
}

4. 演示效果

在這里插入圖片描述



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

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

相關文章

VMware-centOS7安裝redis分布式集群

1.部署redis包 1.1 在usr/local文件夾里創建文件夾 mkdir software 1.2 進入文件夾 cd /usr/local/software/ 下載redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解壓 tar zxvf redis-6.2.6.tar.gz重命名文件夾 mv redis-6.2.6 redis安裝gcc編譯器 yum i…

【RocketMQ Broker 相關源碼】- broker 啟動源碼(2)

文章目錄 1. 前言2. 創建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加載 ConsumeQueue 文件3.3 創建 StoreCheckpoint3.4 indexService.load 加載 IndexFile 文件3.5 recover 文件恢復3.6 延時消息服務加載 4. registerProcesso…

認識含鹽褶皺和沖斷帶中的前造山運動蒸發巖變形

主要觀察結果的示意圖模型&#xff0c;并提出了三疊紀前造山蒸發巖變形的演化模型。&#xff08;a&#xff09; 蒸發巖的初始平緩隆起&#xff0c;在鹽枕和鹽背斜頂部有滑塌褶皺和同沉積伸展斷層。&#xff08;b&#xff09; 底辟形成&#xff0c;主動刺穿和拖動折疊長底辟&…

數據庫MySQL學習——day8(復習與鞏固基礎知識)

文章目錄 1. 數據庫基礎概念復習2. 常用SQL命令復習2.1 SELECT 查詢數據2.2 INSERT 插入數據2.3 UPDATE 更新數據2.4 DELETE 刪除數據 3. 表操作復習3.1 創建表3.2 修改表3.3 刪除表 4. 實踐任務4.1 創建樣例數據庫和表4.2 插入和更新數據4.3 使用WHERE、ORDER BY、LIMIT進行查…

TS 字面量類型

str是string類型l str2是常量&#xff0c;類型是字面量類型 用途&#xff1a;配合聯合類型確定更嚴謹精確的可選值利恩

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)1.3.1 工具定位與適用場景1.3.2 深度解析三大工具1.3.2.1 psql:命令行的終極掌控核心特性基礎操作示例優缺點分析1.3.2.2 PGAdmin:PostgreSQL 專屬管理平臺…

2023年第十四屆藍橋杯省賽B組Java題解【 簡潔易懂】

2023年第十四屆藍橋杯省賽B組Java 題解 比賽整體情況說明 第十四屆藍橋杯大賽省賽B組Java賽道共有10道題目&#xff0c;題型分布如下&#xff1a; 題目類型題量難度分布考察重點結果填空題53簡單 2中等基礎算法、數學邏輯、字符串處理編程大題52中等 3困難動態規劃、圖論、…

深度學習中的數據增強:提升食物圖像分類模型性能的關鍵策略

深度學習中的數據增強&#xff1a;提升食物圖像分類模型性能的關鍵策略 在深度學習領域&#xff0c;數據是模型訓練的基石&#xff0c;數據的數量和質量直接影響著模型的性能表現。然而&#xff0c;在實際項目中&#xff0c;獲取大量高質量的數據往往面臨諸多困難&#xff0c;…

jakarta.mail(javax.mail)包中關于SMTP協議支持的屬性參數配置

一、程序屬性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默認用戶名。2mail.smtp.hostString要連接的SMTP服務器。3mail.smtp.portint如果 connect()方法未明確指定一個&#xff0c;則要連接的SMTP服務器端口。默認為25。4mail.smtp.connectiontimeoutint套接字連…

《解鎖SCSS算術運算:構建靈動樣式的奧秘》

SCSS作為CSS預處理器&#xff0c;算術運算功能猶如一顆璀璨明珠&#xff0c;賦予我們動態計算樣式屬性值的強大能力&#xff0c;讓網頁樣式不再是一成不變的刻板呈現&#xff0c;而是能夠根據各種條件和需求靈動變化。 在SCSS的世界里&#xff0c;算術運算絕非孤立的存在&…

Java 入門篇

文章目錄 一、注釋1、單行注釋2、多行注釋3、文檔注釋 二、字面量注意 三、變量四、標識符 一、注釋 1、單行注釋 // 同 C992、多行注釋 /* 同 C89和 C99 等 */3、文檔注釋 /** 文檔注釋&#xff0c;其內容是可以提取到一個程序說明文檔中去的*/二、字面量 同 C 常量 注意…

PowerShell安裝Chocolatey

文章目錄 環境背景安裝參考 環境 Windows 11 專業版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有點類似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默認沒有 grep 命令&#xff0c;則可以通過…

將Airtable導入NocoDB

將Airtable導入NocoDB 0. 前提條件1. 詳細步驟 NocoDB提供了一種簡化流程&#xff0c;可在幾分鐘內將您的Airtable數據庫無縫轉移到各種數據庫管理系統&#xff0c;包括MySQL、Postgres和SQLite。此功能特別適合希望將Airtable數據庫遷移到更強大且可擴展的數據庫管理系統中的用…

微軟發布了最新的開源推理模型套件“Phi-4-Reasoning

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Elasticsearch入門速通01:核心概念與選型指南

一、Elasticsearch 是什么&#xff1f; 一句話定義&#xff1a; 開源分布式搜索引擎&#xff0c;擅長處理海量數據的實時存儲、搜索與分析&#xff0c;是ELK技術棧&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心組件。 核心能力&#xff1a; 近實時搜索&…

【angular19】入門基礎教程(三):關于angular里面的響應式數據入門使用

三個框架&#xff0c;都有響應式數據的概念。在angular里面有專門的叫法&#xff0c;響應式數據叫信號,英文名signal。其他兩個框架式沒有專門的名字的&#xff0c;統稱為動態數據。這點可以說&#xff0c;angular還是太細了&#xff0c;細節值得點贊&#xff01;&#xff01; …

GitHub Actions 和 GitLab CI/CD 流水線設計

以下是關于 GitHub Actions 和 GitLab CI/CD 流水線設計 的基本知識總結: 一、核心概念對比 維度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml執行環境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市場生態Actions Mar…

【網絡編程】HTTP(超文本傳輸協議)詳解

&#x1f984;個人主頁:修修修也 &#x1f38f;所屬專欄:網絡編程 ??操作環境:Visual Studio 2022 目錄 &#x1f4cc;HTTP定義 &#x1f4cc;HTTP工作原理 1.客戶端發起請求: 2.服務器處理請求: 3.客戶端處理響應: &#x1f4cc;HTTP關鍵特性 &#x1f38f;HTTP請求方法 &am…

Centos小白之在CentOS8.5中安裝Rabbitmq 3.10.8

注意事項 安裝以及運行等其他操作&#xff0c;要使用root賬號進行&#xff0c;否則會遇到很多麻煩的事情。 使用命令行進行遠程登錄 ssh root192.168.0.167 安裝make 執行安裝命令 yum -y install make gcc gcc-c kernel-devel m4 ncurses-devel openssl-devel這里有可能會…

SQL筆記——左連接、右連接、內連接

前言&#xff1a;總是忘記表連接的區別&#xff0c;在面試的時候也容易被問到&#xff0c;因此就好記性不如爛筆頭吧 集合運算 有并集、交集、差集 聯合查詢*&#xff08;針對行合并的&#xff09;* union為關鍵字&#xff0c;就是將兩個select的結果求并集&#xff08;此時重…