1. 坐标系统
计算机三维图形学中,常用的坐标系统有:Model坐标,World坐标,View坐标和Display坐标。
(1)Model坐标,定义一个具体三维模型时所采用的坐标系,是一个局部笛卡尔坐标系。在VTK中,可以认为每一个"角色Actor"都有一个自己的Model坐标系,原点通常在重心(中心)位置。
(2)World坐标,就是“渲染器Renderer”搭建的三维展示“舞台”中的同一的三维空间坐标系。它决定了每一个“角色Actor”在其间的位置和状态。
(3)View坐标,是通过“摄像机Camera”看到的空间坐标。Activiz的renderer控件中,默认会把摄像机的中央对准在所有“角色Actor”的中间位置。在对renderer控件的交互操作中,三维控件的旋转、缩放等操作就是围绕这个坐标展开的。
(4)Display坐标,Activiz的renderer控件显示的像素坐标。
2. 空间转换
在"舞台"中摆放“角色”,这就是空间变换要做的事。实现方法,在World坐标系统,对各个“角色”进行旋转、移动和缩放操作。
在计算机图像学上,三维空间变化的旋转、移动和缩放是通过矩阵运算来实现的,有兴趣深入的朋友请阅读OpenGL或VTK专业书籍。在此,我们只讲简单的实现方法,并提供示例,供大家测试和实验使用。
VTK是面向完全面向对象的图形库,关于空间变换提供了vtkTranform类。当需要对一个类进行空间变换的时候,我们就需要新建一个vtkTranform类的实体,通过该类的方法实现旋转、移动和缩放等空间操作,最后通过于角色的绑定来实现最终效果。C#示例代码附详解如下:
vtkTransform transform = vtkTransform.New(); // 空间变换对象
transform.PostMultiply(); // 设置右乘变换矩阵
transform.Scale(2.0, 1.0, 1.0); // 沿X个方向缩放2.0倍(Y方向1.0,Z方向1.0)
transform.RotateZ(30); // 绕Z轴旋转30度
transform.Translate(2.0, 0, 0);