1.坐标系统

计算机图形学里常用的坐标系统主要有四种,分别是:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统,以及两种表示坐标点的方式:以屏幕像素值为单位和归一化坐标值(各坐标轴取值都为[-1, 1])。
Model坐标系统是定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。例如,我们要定义一个表示球体的Actor,一般的做法是将该球体定义在一个柱坐标系统里。
World坐标系统是放置Actor的三维空间坐标系,Actor其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模型可以定义有自己的Model坐标系统,但World坐标系只有一个,每一个Actor必须通过放缩、旋转、平移等操作将Model坐标系变换到World坐标系。World坐标系同时也是相机和光照所在的坐标系统。
View坐标系统表示的是相机所看见的坐标系统。X、Y、Z轴取值为[-1, 1],X、Y值表示像平面上的位置,Z值表示到相机的距离。相机负责将World坐标系变换到View坐标系。

坐标之间的关系如下图所示:

Display坐标系统跟View坐标系统类似,但是各坐标轴的取值不是[-1, 1],而是使用屏幕像素值。屏幕上显示的不同窗口的大小会影响View坐标系的坐标值[-1, 1]到Display坐标系的映射。可以把不同的渲染场景放在同一个窗口进行显示,例如,在一个窗口里,分为左右两个渲染场景,这左右的渲染场景(vtkRenderer)就是不同的视口(Viewport)。

2.一个窗口分割为多个视窗

/*****************************************************
*Overview:窗口分割   2016-11-25
*Tsinghua Univ.  All Rights Reserved@Shenchunxu
******************************************************/
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
#include <vtkConeSource.h>
#include <vtkCubeSource.h>
#include <vtkCylinderSource.h>
#include <vtkSphereSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkActor.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>int main()
{vtkSmartPointer<vtkConeSource> cone = vtkSmartPointer<vtkConeSource>::New();vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();vtkSmartPointer<vtkCylinderSource> cylinder = vtkSmartPointer<vtkCylinderSource>::New();vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New();vtkSmartPointer<vtkPolyDataMapper> coneMapper = vtkSmartPointer<vtkPolyDataMapper>::New();coneMapper->SetInputConnection(cone->GetOutputPort());vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cubeMapper->SetInputConnection(cube->GetOutputPort());vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();cylinderMapper->SetInputConnection(cylinder->GetOutputPort());vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();sphereMapper->SetInputConnection(sphere->GetOutputPort());vtkSmartPointer<vtkActor> coneActor = vtkSmartPointer<vtkActor>::New();coneActor->SetMapper(coneMapper);vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New();cubeActor->SetMapper(cubeMapper);vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();cylinderActor->SetMapper(cylinderMapper);vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New();sphereActor->SetMapper(sphereMapper);vtkSmartPointer<vtkRenderer> renderer1 = vtkSmartPointer<vtkRenderer>::New();renderer1->AddActor(coneActor);renderer1->SetBackground(1.0,0.0,0.0);renderer1->SetViewport(0.0,0.0,0.5,0.5);vtkSmartPointer<vtkRenderer> renderer2 = vtkSmartPointer<vtkRenderer>::New();renderer2->AddActor(cubeActor);renderer2->SetBackground(0.0,1.0,0.0);renderer2->SetViewport(0.5,0.0,1.0,0.5);vtkSmartPointer<vtkRenderer> renderer3 = vtkSmartPointer<vtkRenderer>::New();renderer3->AddActor(cylinderActor);renderer3->SetBackground(0.0,0.0,1.0);renderer3->SetViewport(0.0,0.5,0.5,1.0);vtkSmartPointer<vtkRenderer> renderer4 = vtkSmartPointer<vtkRenderer>::New();renderer4->AddActor(sphereActor);renderer4->SetBackground(1.0,1.0,0.0);renderer4->SetViewport(0.5,0.5,1.0,1.0);vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();renWin->AddRenderer(renderer1);renWin->AddRenderer(renderer2);renWin->AddRenderer(renderer3);renWin->AddRenderer(renderer4);renWin->SetSize( 640, 480 );renWin->Render();renWin->SetWindowName("ViewPort");vtkSmartPointer<vtkRenderWindowInteractor> interactor =vtkSmartPointer<vtkRenderWindowInteractor>::New();interactor->SetRenderWindow(renWin);renWin->Render();interactor->Initialize();interactor->Start();return EXIT_SUCCESS;
}

运行结果:

3.空间变换

遵循几何变换,已经详细论述过,不在多谈!

4.总结视图

一张图可以考验之前学过的知识是否真正的理解了!

VTK修炼之道9:坐标系统及空间变换(窗口-视图分割)相关推荐

  1. VTK修炼之道77:交互部件_分割/配准类Widget与其他Widget

    1.分割/配准交互部件 图像分割与配准是数字图像处理技术两大主要的应用领域,特别是在医学图像处理中. 著名的医学图像分割与配准工具包ITK(Insight Segmentation & Reg ...

  2. VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)

    1.点云配准 在计算机逆向工程中,通过三维扫描等实物数字化技术可以获取各种点云数据.但是受到测量环境和设备的影响,再一次测量的情况下,难以获取实物整体的点云数据,因此需要多次从不同角度进行测量.但不同 ...

  3. VTK修炼之道40:频域处理_快速傅里叶变换及其反变换1

    1.图像频域处理的意义 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换. 在一些图 ...

  4. VTK修炼之道11:基本数据结构_数据对象数据集

    1.前言 前面学习了VTK的一个重要概念--可视化管线,了解了VTK数据的流动过程.好比我们做一道菜,在做每一道菜之前,首先要掌握这道菜的做法,什么时候放盐什么时候放酱油等调料,除了需要弄清楚做每一道 ...

  5. VTK修炼之道80:VTK开发基础_智能指针与引用计数

    1.引用计数 VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则.因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式.观察者/命令模式:还有 ...

  6. VTK修炼之道78:交互与拾取_点拾取

    1.拾取 选择拾取是人机交互过程的一个重要功能. 一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能. 另外,在某些三维图形的编辑软 ...

  7. VTK修炼之道64:纹理映射体绘制_三维纹理映射

    1.三维纹理映射 目前市面上的能多先科都是支持三维纹理映射的.利用三维纹理映射,将体数据映射至一组与视图平面平行的多边形,避免了二维纹理映射方法中因为纹理图像的切换造成的瑕疵.VTK中三维纹理映射体绘 ...

  8. VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

    1.固定点光线投影算法 vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者.该类能够实现基于Alpha合成的体绘制方法和最 ...

  9. VTK修炼之道60:体绘制_体绘制管线图形渲染管线

    1.几何渲染与体绘制 1.1 几何渲染 前面练习的渲染技术都是几何渲染技术.所谓的几何渲染技术,就是通过绘制几何图元(顶点.线段.面片等)来渲染数据,例如:绘制图像需要在空间中建立一个四边形图元,然后 ...

最新文章

  1. BZOJ2208 [Jsoi2010]连通数
  2. 【计算机是如何通信 四】Web服务器/Severlet/DispatcherServlet/Controller
  3. 待人真诚p2psearcher2013源码下载
  4. csv java 科学计数法_javaweb开发页面数字过长显示科学计数法的问题
  5. 李彦宏被泼水,是“多数人的暴力”还是“群众的宣泄”
  6. 柯洁放言力拼AlphaGo:我抱有必死的信念!(全部细节都在这里)
  7. 【OR】YALMIP Bilevel规划
  8. Python-CSV文件存储
  9. Linux 下 github 的使用
  10. 【HTML5】基础教程
  11. Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)
  12. JS高级 之 Proxy-Reflect 使用详解
  13. python里面入门基础(路漫漫其修远兮,吾将上下而求索)
  14. 通过sql实现模糊搜索按匹配度从高到低排序
  15. Vue 2.0 起步 (3) 数据流 vuex 和 LocalStorage 实例 - 微信公众号 RSS
  16. 软件工程与计算II-4-项目启动
  17. QUIC浅析,android开发者模式
  18. ArcGIS线图层转面图层后,使面图层拥有线图层的属性
  19. 2021-2027全球与中国机器人精密减速器市场现状及未来发展趋势
  20. HTML构建空气质量实时获取代码,基于C#的空气质量实时监测接口调用代码实例

热门文章

  1. Clustered Data ONTAP Fundamentals课程第一单元学习笔记(续3)
  2. Xcode7 (Xcode setting ENABLE_BITCODE)
  3. 多线程与并发编程实践
  4. NYOJ 108 士兵杀敌(一)
  5. CF24D Broken robot | DP 高斯消元
  6. Mol Cell Proteomics. |胡丹丹| 雷公藤红素通过SIRT1-FXR 信号通路保护胆汁淤积性肝损伤...
  7. springboot整合jpa之连接MySql实现crud
  8. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)...
  9. poj12652954 [皮克定理 格点多边形]【学习笔记】
  10. SQL SELECT DISTINCT 语句 用法