(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.mzph.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>&…