VTK 光照、颜色、相机、坐标系统及空间变换

1、vtkLight常的方法有:

SetColor() — 设置光照的颜色,以RGB的形式指定颜色。

SetPosition() — 设置光照位置。

SetFocalPoint() — 设置光照焦点。

SetIntensity() — 设置光照的强度。

SetSwitch() / SwitchOn()/ SwitchOff()— 打开或关闭对应的光照。

在基础概念代码中加入:

 1    vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();
 2     myLight->SetColor(0, 1, 0);
 3     myLight->SetPosition(0, 0, 1);
 4     myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
 5     renderer->AddLight(myLight); //将光线照加入到渲染场景中
 6  
 7     vtkSmartPointer<vtkLight> myLight2 = vtkSmartPointer<vtkLight>::New();
 8     myLight2->SetColor(0, 0, 1);       //设置光照颜色
 9     myLight2->SetPosition(0, 0, -1);   //设置光照位置
10     myLight2->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
11     renderer->AddLight(myLight2);
运行后的结果:
问题:

为什么这个运行出来的结果是放大状态,通过缩小才能看见这个圆柱体!

2、确定相机实际方向(相机的视图)的有三个因素:相机位置、相机焦点和朝上方向。

vtkCamera定义了两种投影方法,一种是正交投影(OrthographicProjection),也叫平行投影(Parallel Projection),即进入相机的光线与投影方向是平行的。另一种是透视投影(PerspectiveProjection),即所有的光线相交于一点。

l  视角:透视投影时需要指定相机的视角(View Angle),默认的视角大小为30º,可以用方法vtkCamera::SetViewAngle()设置。

控制相机运动的方法:vtkCamera::Dolly(),vtkCamera::Roll(),vtkCamera::Azimuth(),vtkCamera::Yaw(),

vtkCamera::Elevation(),vtkCamera::Pitch(),vtkCamera::Zoom()。

3、颜色

VTK采用RGB和HSV两种颜色系统来描述颜色。vtkProperty::SetColor(r,g, b)采用的就是RGB颜色系统设置颜色属性值。

HSV颜色系统同样也是由三个分量来决定颜色,分别是:色相(Hue),是颜色的基本属性,就是我们平常所说的颜色名称,如红色、黄色等;饱和度(Saturation),是指颜色的纯度,其值越高则越纯;值(Value,也就是强度Intensity或者亮度Bright),值为0通常表示的是黑色,值为1表示的是最亮的颜色。这三个分量的取值范围也是0到1。类vtkLookupTable提供了HSV颜色系统设置的方法。

与颜色设置相关的VTK类除了vtkProperty,vtkLookupTable之外,还有vtkColorTransferFunction。vtkLookupTable和vtkColorTransferFunction都派生自vtkScalarsToColors。

4、坐标系统及空间变换

计算机图形学里常用的坐标系统主要有四种,分别是:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统,它们之间的关系如图3.9所示。

在VTK里,Model坐标系统用得比较少,其他三种坐标系统经常使用。它们之间的变换则是由类vtkCoordinate进行管理的。

l  DISPLAY — X、Y轴的坐标取值为渲染窗口的像素值。坐标原点位于渲染窗口的左下角,这个对于VTK里所有的二维坐标系统都是一样的,且VTK里的坐标系统都是采用右手坐标系。

l  NORMALIZEDDISPLAY — X、Y轴坐标取值范围为[0, 1],跟DISPLAY一样,也是定义在渲染窗口里的。

l  VIEWPORT— X、Y的坐标值定义在视口或者渲染器(Renderer)里。

l  NORMALIZEDVIEWPORT — X、Y坐标值定义在视口或渲染器里,取值范围为[0, 1]。

l  VIEW— X、Y、Z坐标值定义在相机所在的坐标系统里,取值范围为[-1, 1],Z值表示深度信息。

l  WORLD — X、Y、Z坐标值定义在世界坐标系统,参考图3.9。

l  USERDEFINED— 用户自定义坐标系统。

vtkCoordinate类提供的设置以上坐标系统的方法是:

SetCoordinateSystemToDisplay ()

SetCoordinateSystemToNormalizedDisplay ()

SetCoordinateSystemToViewport ()

SetCoordinateSystemToNormalizedViewport ()

SetCoordinateSystemToView ()

SetCoordinateSystemToWorld ()

三维到二维投影的方法包括:透视投影和正交投影两种方法。

 

原文地址:https://www.cnblogs.com/ybqjymy/p/13985559.html