zoukankan      html  css  js  c++  java
  • 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 ()

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

     

  • 相关阅读:
    SVN服务器使用和搭建
    jenkins以.war包安装配置教程
    Django数据库与程序交互
    工作中常用到的linux命令
    js获取元素属性
    Jenkins利用插件持续集成的思路及安装
    web前端面试第一次[javascript函数和方法的区别]
    web前端面试第一次[定时器]
    linux卸载mysql
    mysql启动错误:Starting MySQL... ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13985559.html
Copyright © 2011-2022 走看看