文章目錄
- 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