(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.mzph.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;此时重…