文章目录
- 1. 概述
- 2. CMake链接VTK
- 3. main.cpp文件
- 4. 演示效果
更多精彩内容 |
---|
👉内容导航 👈 |
👉VTK开发 👈 |
1. 概述
在VTK(Visualization Toolkit)中,
vtkPerspectiveTransform
和vtkTransform
都是用于几何变换的类,但它们有着显著的区别和不同的应用场景。
模块:CommonTransforms
功能和用途
vtkTransform
- 功能:
vtkTransform
是一个通用的变换类,支持线性变换(如旋转、缩放、平移)和非线性变换(如仿射变换)。- 用途:主要用于三维空间中的几何变换,如模型的位置调整、旋转和缩放。
vtkPerspectiveTransform
- 功能:
vtkPerspectiveTransform
是一种特殊的变换,用于模拟透视投影的效果。- 用途:主要用于模拟相机视角下的物体变换,常用于三维场景渲染中的视图变换。
变换类型
- vtkTransform:支持各种类型的线性变换,包括平移(Translation)、旋转(Rotation)、缩放(Scaling)等。
- vtkPerspectiveTransform:主要进行透视投影变换,这种变换会改变物体在视觉上的大小和形状,以模拟相机观察的效果。
数学表示
- vtkTransform:通常使用4x4的齐次坐标矩阵来表示变换。
- vtkPerspectiveTransform:虽然也可以使用4x4矩阵表示,但其内部实现和计算方式更多地考虑了透视投影的数学特性。
环境 | 说明 |
---|---|
系统 | ubuntu22.04、windows11 |
cmake | 3.22、3.25 |
Qt | 5.14.2 |
编译器 | g++11.4、msvc2017 |
VTK | 9.4.1 |
2. CMake链接VTK
cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS
CommonCore
CommonTransforms
)
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-13 20:41:02
* 开发者: MHF
* 邮箱: 1603291350@qq.com
* 功能:
*********************************************************************************/
#include<iostream>
#include<vtkMatrix4x4.h> //矩阵
#include<vtkNew.h> //智能指针
#include<vtkPerspectiveTransform.h> //透视变换
#include<vtkTransform.h> //变换
using namespace std;int main()
{vtkNew<vtkMatrix4x4> m; // 创建矩阵// 设置矩阵元素值m->SetElement(0, 0, 1);m->SetElement(0, 1, 2);m->SetElement(0, 2, 3);m->SetElement(0, 3, 4);m->SetElement(1, 0, 2);m->SetElement(1, 1, 2);m->SetElement(1, 2, 3);m->SetElement(1, 3, 4);m->SetElement(2, 0, 3);m->SetElement(2, 1, 2);m->SetElement(2, 2, 3);m->SetElement(2, 3, 4);m->SetElement(3, 0, 4);m->SetElement(3, 1, 2);m->SetElement(3, 2, 3);m->SetElement(3, 3, 4);vtkNew<vtkPerspectiveTransform> pt; // 创建透视变换pt->SetMatrix(m); // 设置矩阵vtkNew<vtkTransform> t; // 创建变换t->SetMatrix(m); // 设置矩阵double p[3] = {1, 2, 3}; // 点坐标double p1[3]; // 变换后的点坐标t->TransformPoint(p, p1); // 变换点坐标cout << "变换后的点坐标:" << p1[0] << " " << p1[1] << " " << p1[2] << endl;double p2[3]; // 透视变换后的点坐标pt->TransformPoint(p, p2); // 透视变换点坐标cout << "透视变换后的点坐标:" << p2[0] << " " << p2[1] << " " << p2[2] << endl;return 0;
}
4. 演示效果
PS E:\Code\C++\vtk1\build\Debug> ."E:/Code/C++/vtk1/build/Debug/vtk2.exe"
变换后的点坐标:18 19 20
透视变换后的点坐标:0.857143 0.904762 0.952381