写在前面:

这篇博客简要根据书本内容简要介绍一些VTK中要用到的坐标系统与空间变换。这一部分与计算机图形学结合更加紧密。想起之前也“被迫”研究过一段时间的计算机图形学中三维显示部分,现在简单学一学,提示一下,也挺好。

坐标系统:

书中说计算机图形学中,但我觉得用VTK中更合适,VTK中常用的坐标系统又4种:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统。除此之外,有两种表示坐标点的方法:1.屏幕像素值为单位;2.归一化坐标值[-1,1]。

  • Model坐标系统:定义模型时的坐标系统,一般为局部的笛卡尔坐标系。
  • World坐标系统:Actor、相机、光照所在的三维空间坐标系。Actor类的一个功能就是通过放缩、旋转、平移等方法将Model坐标系转换到World坐标系。每一个模型可以定义一个自己的Model坐标系。但World坐标系只有一个。
  • View坐标系统:相机所看见的坐标系统。X、Y、Z轴取值均为[-1,1]。X、Y表示像素平面上的位置,Z表示到降级的距离。World坐标系通过相机转变为View坐标系。
  • Display坐标系统:实际电脑显示屏幕的坐标系统。屏幕上显示的不同窗口的大小会影响View坐标系的坐标轴[-1,1]到Diaplay坐标系的映射(对应关系)。一个显示屏幕可以显示多个不同的渲染场景。vtk5.10.1可以利用vtkRenderer:SetViewport()来设置不同的视口(取值为[0,1])。
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);

但根据官方文档,最新VTK将SetViewport改为vtkViewport类了。详情可以参见:virtual void vtkViewport::SetViewport 。

vtkCoordinate

VTK提供类vtkCoordinate来管理不同坐标系之间的变换。使用该类也需要包含相应头文件:

#include <vtkCoordinate.h>

坐标系统可以细分为以下几类:

  • DISPLAY——X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角。注意,这个坐标系是一个二维坐标系统。所有VTK里二维坐标系统都是左下角为坐标原点。而且是右手坐标系。
  • NORMALIZED DISPLAY——X、Y轴取值范围为[0,1]。其实就是DISPLAY坐标系归一化了。定义在渲染窗口中。
  • VIEWPORT——X、Y的坐标值定义在视口或者渲染器(Renderer)中。同样为二维坐标系。
  • NORMALIZED VIEWPORT——VIEWPORT归一化之后的坐标系。X、Y的取值范围为[0,1]。
  • VIEW——X、Y、Z坐标值定义在相机所在的坐标系统里。取值范围[-1,1],Z表示深度,即物体离相机的距离。
  • WORLD——X、Y、Z坐标值定义在世界坐标系统中。

VTK中利用vtkCoordinate来表示坐标系统。内部提供了函数接口来定义坐标系统。具体函数可以参考vtkCoordinate Class Reference。一般设置坐标系统函数形式为:

vtkCoordinate::SetCoordinateSystemToXXXXXX();
//XXXXXX可以为DISPLAY、NORMALIZED DISPLAY、VIEWPORT、NORMALIZED //VIEWPORT、VIEW、WORLD

VTK学习-坐标系统相关推荐

  1. VTK学习笔记(三十六)VTK图像填充

    VTK学习笔记(三十六)VTK图像填充 1.官方示例 2.其他例子 总结 1.官方示例 来自官方示例代码,自己只是添加了理解. 代码: #include <vtkCamera.h> #in ...

  2. VTK学习-第一个多柱体生成

    写在前面: 开始新学习VTK,目前对于VTK的理解就是一个三维渲染库,主要用于医学三维重建方面,不能说对这方面很感兴趣,但是总要往前走,希望能从VTK学习中学习一些计算机图形学中三维建模的知识. 多柱 ...

  3. VTK 学习----VTK对象绘制-点(vtkPoints、vtkSphereSource)、线(vtkLine、vtkLineSource)

    VTK 学习----VTK对象绘制-点(vtkPoints.vtkSphereSource).线(vtkLine.vtkLineSource) VTK绘制线段用vtkLine.vtkLineSourc ...

  4. VTK学习笔记3:IO操作读取写入xml文件和vtk文件

    1.vtu文件 vtk实战(二十四)--读入vtu数据 vtk实战(三十)--写入vtu数据 2.vtp文件 2.1读入vtp文件 2.2 创建vtp文件 从网络示例和在线文档中,我收集了一些信息,创 ...

  5. VTK学习笔记(二十一)vtk裁剪求截面面积

    VTK学习笔记(二十一)vtk裁剪求界面面积 1.代码 2.CMakeLists.txt 3.运行输出 4.面积正确性验证 4.1.代码 4.2.执行结果 1.代码 #pragma once#incl ...

  6. Python vtk学习(1)

    Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有 ...

  7. VTK学习笔记(二)-----读入序列图像进行三维体渲染

    体绘制管线Imagedata->=VolumeMapper->Volume->Render->RenderWindow->RenderWindowInteractor S ...

  8. VTK 学习----VTK基础-VTK概述和架构概述

    3.1 VTK概述 什么是VTK?VTK最初被设想为科学数据可视化系统.该领域之外的许多人将可视化视为特定类型的几何渲染:检查虚拟对象并与它们交互.虽然这确实是可视化的一部分,但一般而言,数据可视化包 ...

  9. VTK学习之路——读取并显示raw体数据文件

    数据比较难找,老板给了个网址,里面很多数据可以下载: https://klacansky.com/open-scivis-datasets/sorted-by-size.html 数据文件类型(raw ...

最新文章

  1. 如何凭本事搞砸公司的重大项目?
  2. python加载shellcode免杀 简介
  3. C# 对象深拷贝、浅铐贝、直接拷贝(转)
  4. 考勤系统的业务概念图
  5. web文件怎么传到服务器,web文件传到服务器
  6. android通过adb shell播放音乐
  7. 信息学奥赛一本通 2044:【例5.12】回文字串
  8. python logging简单使用
  9. 并发程序设计模式之Future模式
  10. Android分发事件
  11. 6种常用的项目管理模式
  12. 光学成像原理之景深(Depth of Field)
  13. 出现—passwd:Authentication token manipulation error—错误的解决办法
  14. 愿岁月流成花海,你我结伴而行
  15. defaults(default是什么职位)
  16. keil5的安装详解(看完必会,不会你打我)
  17. macOS Big Sur 11.0 B2(20A4300b)原版镜像
  18. ppt如何变成pdf
  19. ubuntu简繁体输入法快捷键转换
  20. proxy chains 配置

热门文章

  1. 4.7 x64dbg 应用层的钩子扫描
  2. 低功耗蓝牙(BLE)基础知识概述
  3. Codeup100000567问题 E: 习题4-10-1 奖金计算
  4. 东数西算开启算力网络大时代,“九阶评估模型”能带来什么?
  5. SQL注入攻击及其防范检测技术研究
  6. 故障电弧在分布式光伏电站的应用
  7. Linux文件的权限(重要)
  8. RTSC与XDCTools
  9. Node.js 可以做什么
  10. matlab函数图像代码,matlab图像函数大全