当前位置: 首页 > ai >正文

7.vtk坐标系

文章目录

  • vtkCoordinate
  • 示例
    • 使用 vtkRenderer::SetViewport() 设置视口范围

  • Model坐标系统:这是定义模型本身的坐标系。它是一个局部坐标系,允许设计师以一种直观的方式创建对象,例如球体、立方体等。在这个坐标系中,对象的位置通常是相对于自身的中心或某个特定点来定义的。

  • World坐标系统:将多个Model坐标系统中的对象统一放置在一个共同的空间中,这个空间就是World坐标系统。通过缩放、旋转和平移等变换,可以将对象从其原始的Model坐标系移动到World坐标系中的指定位置。此坐标系也是光源和相机所在的坐标系。

  • View坐标系统:也称为Camera坐标系统,它是从虚拟相机的角度来看待整个世界的结果。在这个坐标系中,X、Y、Z轴的取值范围通常为[-1, 1],其中X、Y代表图像平面上的位置,而Z则表示距离相机的距离。从World坐标系到View坐标系的转换涉及到视图变换,即根据相机的位置和方向重新定位场景。

  • Display坐标系统:最终的坐标系,用于表示屏幕上实际显示的内容。与View坐标系不同的是,这里的坐标是基于屏幕分辨率的实际像素值。因此,从View坐标系到Display坐标系的转换涉及到投影变换和视口变换,以确保场景能够正确地适应不同的屏幕尺寸和比例。

在这里插入图片描述

vtkCoordinate

在VTK(Visualization Toolkit)中,vtkCoordinate 类是一个非常重要的工具,用于管理不同坐标系统之间的转换。通过 vtkCoordinate,可以方便地在不同的坐标系统之间进行映射和变换,从而实现复杂的渲染效果。

  1. DISPLAY
   定义:X、Y 轴的取值为渲染窗口的像素值。原点位置:位于渲染窗口的左下角。特点:坐标单位为像素。是一个二维坐标系统。所有二维坐标系统都采用右手坐标系。方法:SetCoordinateSystemToDisplay()
  1. NORMALIZED DISPLAY
   定义:X、Y 轴的取值范围为 [0, 1]。特点:坐标是归一化的,表示相对于渲染窗口的比例。(0, 0) 表示左下角,(1, 1) 表示右上角。方法:SetCoordinateSystemToNormalizedDisplay()
  1. VIEWPORT
  定义:X、Y 的坐标值定义在视口或渲染器(Renderer)里。特点:坐标单位为像素。视口范围由 vtkRenderer::SetViewport() 设置。方法:SetCoordinateSystemToViewport()
  1. NORMALIZED VIEWPORT
   定义:X、Y 的坐标值定义在视口或渲染器里,取值范围为 [0, 1]。特点:坐标是归一化的,表示相对于视口的比例。(0, 0) 表示视口的左下角,(1, 1) 表示视口的右上角。方法:SetCoordinateSystemToNormalizedViewport()
  1. VIEW
    定义:X、Y、Z 坐标值定义在相机所在的坐标系统里。特点:X、Y、Z 的取值范围为 [-1, 1]。Z 值表示深度信息,通常用于表示物体到相机的距离。这是一个三维坐标系统。方法:SetCoordinateSystemToView()
  1. WORLD
   定义:X、Y、Z 坐标值定义在世界坐标系统中。特点:是全局的三维坐标系统。用于定位场景中的对象、光源和相机。方法:SetCoordinateSystemToWorld()
  1. USER DEFINED
 定义:用户自定义的坐标系统。特点:提供灵活性,允许开发者根据需求定义自己的坐标系统。方法:需要手动设置相关参数。

示例

#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkCoordinate.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>using namespace std;int main() {// 创建一个 vtkCoordinate 对象vtkSmartPointer<vtkCoordinate> coordinate = vtkSmartPointer<vtkCoordinate>::New();// 设置坐标系统为 NORMALIZED DISPLAYcoordinate->SetCoordinateSystemToNormalizedDisplay();coordinate->SetValue(0.5, 0.5); // 设置坐标为 (0.5, 0.5)// 创建一个 vtkRenderer 对象vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();// 创建一个 vtkRenderWindow 对象vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();// 将 renderer 添加到 renderWindow 中renderWindow->AddRenderer(renderer);// 假设渲染窗口的大小为 800x600renderer->SetViewport(0.0, 0.0, 1.0, 1.0); // 设置视口范围renderWindow->SetSize(800, 600); // 设置渲染窗口大小// 获取渲染窗口中的像素坐标int* displayPosition = coordinate->GetComputedDisplayValue(renderer);std::cout << "Display Position: ("<< displayPosition[0] << ", "<< displayPosition[1] << ")" << std::endl;while (1);return 0;
}

在这里插入图片描述

使用 vtkRenderer::SetViewport() 设置视口范围

通过 SetViewport() 方法,可以在同一个渲染窗口中创建多个视口,每个视口对应一个渲染器。例如:

renderer1->SetViewport(0.0, 0.0, 0.5, 0.5); // 左下角视口
renderer2->SetViewport(0.5, 0.0, 1.0, 0.5); // 右下角视口
renderer3->SetViewport(0.0, 0.5, 0.5, 1.0); // 左上角视口
renderer4->SetViewport(0.5, 0.5, 1.0, 1.0); // 右上角视口
http://www.xdnf.cn/news/378.html

相关文章:

  • 爬取B站视频弹幕的简易教程(下)
  • c++_csp-j算法 (1)
  • Win 11 重装 Ubuntu 双系统方法
  • [Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
  • 机械设计【】一些常用的技术要求
  • 使用 TensorFlow 和 Keras 构建 U-Net
  • STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统
  • Linux编译艺术:源码编译安装指南
  • SICAR 标准 安全门锁操作箱 按钮和指示灯说明
  • Linux线程——锁
  • 四级英语题型分析
  • 全链路灰度实现
  • 从FPGA实现角度介绍DP_Main_link主通道原理
  • 递归下降 ll(1) 型文法 识别二元组文法分析
  • libevent的bufferevent测试用例和使用方法(附带源码)
  • 筛选法(埃氏筛法)C++
  • 聊聊Doris的数据模型,如何用结构化设计解决实时分析难题
  • 【Linux我做主】make和makefile自动化构建
  • Python语法系列博客 · 第3期 数据结构入门(列表、元组、字典、集合)
  • LeetCode 239 滑动窗口最大值
  • 【深度学习—李宏毅教程笔记】Transformer
  • 探索 .bat 文件:自动化任务的利器
  • 关于数字信号与图像处理——基于Matlab的图像增强技术
  • 将软件架构风格定义为数据流风格,调用返回风格,独立构件风格,虚拟机风格和以数据为为中心这五种风格的依据是什么?请介绍这五种风格
  • 区块链木材业务服务平台:商贸物流新变革
  • 模态双侠闯江湖:SimTier 分层破局,MAKE 智炼新知
  • 不确定与非单调推理的可信度方法
  • 【C++算法】67.栈_基本计算器 II
  • IntelliJ IDEA右键快捷方式设置方法
  • 从 LabelImg 到 Label Studio!AI 数据标注神器升级,Web 版真香