控制光源-ieee standard 829-2008
4.5 控制光源光源比相机容易控制。通用的方法是SetFocalPoint(),SetPosition(),和SetColor()。光源的位置和焦点控制了光源点的方向。光源的颜色表达为一个RGB向量。同样,通过SwitchOn()和SwitchOff()方法可以打开或者关闭光源,而且光源的亮度可以用SetIntensity()方法来设定。默认地,vtkLight的实例是方向光源。即,位置和焦点定义了平行于光线传播的一个向量,而且光源被认为是在无穷大点处。这意味着如果位置和焦点等价地转换,那么在一个物体上的光线不改变。光源与如下的绘制器相联系。这里我们已经创建了一个红色前灯:定位于相机(caml’s)而且指向相机焦点的一个光源。这是一个有用的诀窍,而且被交互的绘制器用来定位相机移动时的光源位置。光源通过使用PositionOn()方法创建位置是可能的。这个方法结合SetConeAngle()方法使用来控制点的传播。180度的一个cone角意味着没有哪个点光源效果会被应用;只有位置的效果。对于更多关于光线传播和反射的模拟,可以参考Python模拟光线传播和反射。
4.6 控制3D道具VTK中的将要被在绘制窗口中画出的对象通常被称为“道具”。有一些不同类型的道具包括vtkProp3D和vtkActor。vtkProp3D是存在于3D空间中的那些道具类型的一个抽象超类(vtkProp3D有支持平移、旋转、缩放,和3D空间中几何投射的一个4*4变换矩阵。)类vtkActor是vtkProp3D的一个类型,它的几何由分析元素例如多边形和线来定义。我们会研究vtkActor和vtkProp3D的其他类型。确定vtkProp3D的位置我们已经看了如何使用相机来围绕一个对象移动;可以选择地,我们也可以稳定地掌握相机和转换道具。可以使用以下的方法来定义一个vtkProp3D的位置(和它的子类):SetPosition(x,y,z)——在world坐标中确定了vtkProp3D的位置。AddPosition(deltaX,deltaY,deltaZ)——沿着每个x,y,z轴变换确定数量的道具。RotateX(theta),RotateY(theta),RotateZ(theta)——分别围绕x,y,z轴旋转theta角度。SetOrientation(x,y,z)——通过围绕z轴旋转设定道具的方位,接着是y轴,然后是z轴。AddOrientation(x,y,z)——添加到道具的当前方位。RotateWXYZ(theta,x,y,z)——把道具围绕定义的x-y-z向量旋转theta角度。Scale(sx,sy,sz)——在x,y,z轴坐标方向上缩放道具。SetOrigin(x,y,z)——确定道具的原点。旋转和缩放围绕原点发生。这些方法用复杂的方式组合起来以控制结果变换矩阵。要记住的重要的事情是上面的操作应用于一个特定的顺序,而且应用的顺序影响了结果actor位置。在VTK中应用这些变换的顺序如下:
需要了解更多关于3D变换矩阵的推导,请参考3D变换中法向量变换矩阵的推导,您还可以下载并查看一些相关的3D图形绘制代码变换矩阵。如果你对应用VTK实现3D重建感兴趣,推荐你看看应用VTK实现3D重建。