文章目录
- 效果
- 大致步骤
- 代码
- 参考
效果
大致步骤
- 包含必要的头文件:引入 VTK 中用于创建、渲染和显示图形的各种类。
- 创建颜色管理对象:vtkNamedColors 用于通过名称选择颜色。
- 创建圆锥源:vtkConeSource 用于生成圆锥的多边形数据。
- 创建映射器:vtkPolyDataMapper 将多边形数据转换为图形基元。
- 创建演员:vtkActor 负责协调圆锥的渲染,并设置其颜色。
- 创建渲染器:vtkRenderer 负责管理演员的渲染,并设置背景颜色。
- 创建渲染窗口:vtkRenderWindow 用于显示渲染结果,并设置窗口大小和名称。
- 循环渲染:通过循环 360 次,每次旋转相机 1 度并渲染图像,实现圆锥的旋转效果。
代码
/*=========================================================================版权归 Ken Martin、Will Schroeder 和 Bill Lorensen 所有保留所有权利。有关详细信息,请参阅 Copyright.txt 或 http://www.kitware.com/Copyright.htm。此软件在分发时不提供任何形式的保证;甚至不保证其适用于特定目的。有关更多信息,请参阅上述版权声明。=========================================================================*/// 首先包含我们要使用的 VTK 类所需的头文件。
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkConeSource.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>int main(int, char*[])
{//// 接下来,我们创建一个 vtkNamedColors 实例,用于为对象和背景选择颜色。//vtkNew<vtkNamedColors> colors;//// 现在,我们创建一个 vtkConeSource 实例,并设置它的一些属性。// vtkConeSource 实例 “cone” 是可视化管道的一部分(它是一个源处理对象);// 它生成数据(输出类型为 vtkPolyData),其他过滤器可以对这些数据进行处理。//vtkNew<vtkConeSource> cone;// 设置圆锥的高度为 3.0cone->SetHeight(3.0);// 设置圆锥底面的半径为 1.0cone->SetRadius(1.0);// 设置圆锥的分辨率为 10,即圆锥的侧面由多少个多边形组成cone->SetResolution(10);//// 在这个例子中,我们用一个映射器处理对象来终止管道。// (像 vtkShrinkPolyData 这样的中间过滤器可以插入到源和映射器之间。)// 我们创建一个 vtkPolyDataMapper 实例,将多边形数据映射为图形基元。// 我们将圆锥源的输出连接到这个映射器的输入。//vtkNew<vtkPolyDataMapper> coneMapper;coneMapper->SetInputConnection(cone->GetOutputPort());//// 创建一个演员(actor)来表示圆锥。演员负责协调映射器图形基元的渲染。// 一个演员还通过 vtkProperty 实例引用属性,并且包含一个内部变换矩阵。// 我们将这个演员的映射器设置为上面创建的 coneMapper。//vtkNew<vtkActor> coneActor;coneActor->SetMapper(coneMapper);// 设置圆锥演员的颜色为 “MistyRose”(淡玫瑰色)coneActor->GetProperty()->SetColor(colors->GetColor3d("MistyRose").GetData());//// 创建渲染器(Renderer)并为其分配演员。渲染器就像一个视口。// 它是屏幕上窗口的一部分或全部,负责绘制它所拥有的演员。// 我们还在这里设置背景颜色。//vtkNew<vtkRenderer> ren1;// 将圆锥演员添加到渲染器中ren1->AddActor(coneActor);// 设置渲染器的背景颜色为 “MidnightBlue”(深蓝色)ren1->SetBackground(colors->GetColor3d("MidnightBlue").GetData());// 最后,我们创建一个将显示在屏幕上的渲染窗口。// 我们使用 AddRenderer 将渲染器放入渲染窗口中。// 我们还将窗口大小设置为 300 像素宽,300 像素高。//vtkNew<vtkRenderWindow> renWin;// 将渲染器添加到渲染窗口中renWin->AddRenderer(ren1);// 设置渲染窗口的大小为 300x300 像素renWin->SetSize(300, 300);// 设置渲染窗口的名称为 "Tutorial_Step1"renWin->SetWindowName("Tutorial_Step1");//// 现在,我们循环 360 度,每次都渲染圆锥。//for (int i = 0; i < 360; ++i){// 渲染图像renWin->Render();// 将活动相机绕方位角旋转 1 度ren1->GetActiveCamera()->Azimuth(1);}return EXIT_SUCCESS;
}
参考
https://examples.vtk.org/site/Cxx/Tutorial/Tutorial_Step1/