VTK学习-坐标系统
写在前面:
这篇博客简要根据书本内容简要介绍一些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学习-坐标系统相关推荐
- VTK学习笔记(三十六)VTK图像填充
VTK学习笔记(三十六)VTK图像填充 1.官方示例 2.其他例子 总结 1.官方示例 来自官方示例代码,自己只是添加了理解. 代码: #include <vtkCamera.h> #in ...
- VTK学习-第一个多柱体生成
写在前面: 开始新学习VTK,目前对于VTK的理解就是一个三维渲染库,主要用于医学三维重建方面,不能说对这方面很感兴趣,但是总要往前走,希望能从VTK学习中学习一些计算机图形学中三维建模的知识. 多柱 ...
- VTK 学习----VTK对象绘制-点(vtkPoints、vtkSphereSource)、线(vtkLine、vtkLineSource)
VTK 学习----VTK对象绘制-点(vtkPoints.vtkSphereSource).线(vtkLine.vtkLineSource) VTK绘制线段用vtkLine.vtkLineSourc ...
- VTK学习笔记3:IO操作读取写入xml文件和vtk文件
1.vtu文件 vtk实战(二十四)--读入vtu数据 vtk实战(三十)--写入vtu数据 2.vtp文件 2.1读入vtp文件 2.2 创建vtp文件 从网络示例和在线文档中,我收集了一些信息,创 ...
- VTK学习笔记(二十一)vtk裁剪求截面面积
VTK学习笔记(二十一)vtk裁剪求界面面积 1.代码 2.CMakeLists.txt 3.运行输出 4.面积正确性验证 4.1.代码 4.2.执行结果 1.代码 #pragma once#incl ...
- Python vtk学习(1)
Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的,包含有 ...
- VTK学习笔记(二)-----读入序列图像进行三维体渲染
体绘制管线Imagedata->=VolumeMapper->Volume->Render->RenderWindow->RenderWindowInteractor S ...
- VTK 学习----VTK基础-VTK概述和架构概述
3.1 VTK概述 什么是VTK?VTK最初被设想为科学数据可视化系统.该领域之外的许多人将可视化视为特定类型的几何渲染:检查虚拟对象并与它们交互.虽然这确实是可视化的一部分,但一般而言,数据可视化包 ...
- VTK学习之路——读取并显示raw体数据文件
数据比较难找,老板给了个网址,里面很多数据可以下载: https://klacansky.com/open-scivis-datasets/sorted-by-size.html 数据文件类型(raw ...
最新文章
- 如何凭本事搞砸公司的重大项目?
- python加载shellcode免杀 简介
- C# 对象深拷贝、浅铐贝、直接拷贝(转)
- 考勤系统的业务概念图
- web文件怎么传到服务器,web文件传到服务器
- android通过adb shell播放音乐
- 信息学奥赛一本通 2044:【例5.12】回文字串
- python logging简单使用
- 并发程序设计模式之Future模式
- Android分发事件
- 6种常用的项目管理模式
- 光学成像原理之景深(Depth of Field)
- 出现—passwd:Authentication token manipulation error—错误的解决办法
- 愿岁月流成花海,你我结伴而行
- defaults(default是什么职位)
- keil5的安装详解(看完必会,不会你打我)
- macOS Big Sur 11.0 B2(20A4300b)原版镜像
- ppt如何变成pdf
- ubuntu简繁体输入法快捷键转换
- proxy chains 配置