VTK学习笔记三

过滤器

过滤器是一种数据处理机制,接收一个或多个输入,得到一个输出

几种主要过滤器

过滤器类型|作用|demo

—|:–?:–?

vtkImageSobel2D|使用Sobel函数计算2D图像标量场中的矢量场|example4|

vtkImageLaplacian|计算标量图像的拉普拉斯算子|example5|

vtkImageHybridMedian2D|一种中值滤波器,可以保留图像的细线和角|example6|

vtkImageFFT|快速傅里叶变换|example7|

vtkImageRFFT|快速逆傅里叶变换|example8|

vtkImageIdealLowPass|在频域实现图像的低通滤波|example9|

vtkImageAnisotropicDiffusion2D|迭代扩散二位图像,保持边界平滑|example10|

vtkImageAccumulate|将组件空间划分成离散的|example11|

vtkImageConvolve|使用3D NxNxN内核或2D NxN内核对图像进行卷积。 输出图像被裁剪为与输入相同的大小|example12|

vtkImageGaussianSmooth|用高斯函数对输入图像进行卷积操作实现平滑|example13|

vtkImageShiftScale|移动像素(添加常数值)然后缩放(乘以标量)|example14|

vtkImageFlip|沿过滤轴反映数据|example15|

vtkImagePermute|重新排序输入的轴|example16|

vtkImageMirrorPad|通过使用原始图像的镜像(图像边界处的镜像)填充额外像素来使图像更大|example17|

vtkImageMagnify|将输入的每个像素映射到输出的nxmx …区域|example18|

vtkShrinkPolyData|将图形中的所有三角面片缩小一定的比例,但整个图形的大小没有变,这就使得图中出现龟裂|example19

注意:表格中的过滤器都可用于处理2D图像数据,也可以用于处理三维体数据

相机控制

相机和光照是三维场景中不可缺少的元素,render会创建默认的相机和光照

创建相机


    //创建相机

    vtkSmartPointer<vtkCamera> myCamer = vtkSmartPointer<vtkCamera>::New();

    //设定远、近裁减平面

    myCamer->SetClippingRange(0.01,1000);

    //设定焦点位置

    myCamer->SetFocalPoint(0.0,0.0,0.0);

    //设定相机位置

    myCamer->SetPosition(0.0,1.0,0.0);

    //设定相机向上方向

    myCamer->SetViewUp(0.0,0.0,1.0);

    //设定视平面法线

    myCamer->ComputeViewPlaneNormal();

    //设定视角(角度)

    myCamer->SetEyeAngle(30);

    //创建绘制者对象

    vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();

    //将相机设为活动相机

    ren1->SetActiveCamera(myCamer);

    //重置相机,使观察方向生效(很重要)

    ren1->ResetCamera();

相机的常用方法


    //沿着经线方向移动相机

    myCamer->Azimuth(120);

    //沿着纬线线方向移动相机

    myCamer->Elevation(60);

    //强迫观察方向和观察的向上方向正交,避免观察的向上方向和观察方向平行而产生异常

    myCamer->OrthogonalizeViewUp();

    //设定相机使用正交投影

    myCamer->ParallelProjectionOn();



控制光源


    //创建光源

    vtkSmartPointer<vtkLight> myLight = vtkSmartPointer<vtkLight>::New();

    //设定光源位置点

    myLight->SetPosition(0,0,10);

    //设定光源照射点

    myLight->SetFocalPoint(0,0,0);

    //漫反射光颜色

    myLight->SetDiffuseColor(1.0,1.0,0.0);

    //环境光颜色

    myLight->SetAmbientColor(1.0,1.0,1.0);

    //设置点光源

    myLight->SetPositional(30);

    //创建绘制者对象

    vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();

    //设置光源

    ren1->AddLight(myLight);

代码附件如下:

https://vtk.org/Wiki/VTK/Examples/Cxx

猜你喜欢

转载自blog.csdn.net/tianzhiyi1989sq/article/details/92431468