控制光源比控制相机容易得多。通用的方法是SetFocalPoint()SetPosition()SetColor()。光源的位置和焦点控制了光源的方向,光源的颜色则用一个RGB向量来表示。通过SwitchOn()SwitchOff()方法可以打开或关闭光源,而光源的亮度可以用SetIntensity()方法来设定。

默认情况下,vtkLight的实例是方向光源。这意味着位置和焦点定义了平行于光线传播的一个向量,而且光源被认为是在无穷远处。因此,即使位置和焦点发生变化,照在物体上的光线也不会改变。你可以通过以下链接获取更多关于光源选型的详细信息:光源选型介绍

在这里,我们创建了一个红色前灯:它定位于相机(caml’s)并指向相机的焦点。这个技巧非常有用,交互的绘制器用它来定位相机移动时的光源(详细信息请参见48页的“使用VTK Interactors”)。位置光源可以通过使用PositionOn()方法来创建。这个方法与SetConeAngle()方法结合使用来控制点的传播。一个180度的锥角意味着没有哪个点光源效果会被应用(即,截短的光源锥);只有位置的效果。

关于如何选择合适的光源,你可以参考这篇机器视觉光源的介绍及选择方法,其中详述了不同光源的适用场景和选择标准。

控制3D道具时,VTK中的对象通常被称为“道具”(就像舞台上的道具)。有一些不同类型的道具,包括vtkProp3DvtkActorvtkProp3D是存在于3D空间中的那些道具类型的一个抽象超类,它有一个4x4的变换矩阵,用于支持平移、旋转、缩放和几何投射。而vtkActorvtkProp3D的一种类型,它的几何由多边形和线来定义。你可以在这里找到关于VTK库接口的详细介绍:主要介绍VTK库接口

为了确定vtkProp3D的位置,我们可以使用以下方法:

  • SetPosition(x,y,z)——在世界坐标中确定位置。

  • AddPosition(deltaX,deltaY,deltaZ)——沿着每个x,y,z轴变换一定数量。

  • RotateX(theta)RotateY(theta)RotateZ(theta)——分别围绕x,y,z轴旋转一定角度。

  • SetOrientation(x,y,z)——通过围绕z轴、y轴、z轴的顺序旋转设定道具的方位。

  • AddOrientation(x,y,z)——添加到道具的当前方位。

  • RotateWXYZ(theta,x,y,z)——围绕定义的x-y-z向量旋转一定角度。

  • Scale(sx,sy,sz)——在x,y,z轴方向上缩放。

  • SetOrigin(x,y,z)——确定道具的原点,旋转和缩放围绕原点发生。

这些方法以复杂的方式组合起来控制变换矩阵。重要的是要记住,这些操作按照特定的顺序应用,而且应用的顺序会影响actor的位置。详细的使用指南请参考:VTK工具包介绍

难道不想了解更多关于3D道具和光源控制的技巧吗?探寻这些资源,让你的项目更加出彩吧!