hallo,小伙伴们,好久不见~ 新的学期开始啦,大家有没有做好准备呢?今天咱们就来小小的热一个身,讲一下基于C++的vtk库的使用。这篇文章咱们就讲一下射线的构建吧,后续相关的文章还会继续更新哦~
首先是需要引入的库。
#include <vtkSmartPointer.h>
#include <vtkLineSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
然后,我们写一个main函数,在函数里构建我们的三维模型。
这里按照vtk构建三维模型的基本流程,首先构建renderer,再构建window。然后构建三维模型(例如,这里是射线,也就是vtkLineSource),大家可以按照自己的需求修改起点和终点的坐标。接下来构建该三维模型的mapper和actor。最后,在renderer中添加actor等。
如果小伙伴们想构建别的三维模型,只需要更改创建vtkLineSource的部分即可。
// 创建一个vtkRenderWindow和vtkRenderer
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
// 创建一个vtkRenderWindowInteractor
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
// 创建一个vtkLineSource,定义射线的起点和终点
vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
lineSource->SetPoint1(0, 0, 0); // 起点坐标
lineSource->SetPoint2(1, 1, 1); // 终点坐标
// 创建一个vtkPolyDataMapper将数据映射到渲染器
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(lineSource->GetOutputPort());
// 创建一个vtkActor并将映射器设置给它
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 添加actor到渲染器
renderer->AddActor(actor);
// 设置渲染器的背景颜色
renderer->SetBackground(0.1, 0.1, 0.1);
// 渲染场景并启动交互
renderWindow->Render();
renderWindowInteractor->Start();
接下来,介绍一些基本操作。
下面这行代码可以设置射线的颜色。其中,(1, 0, 0)是颜色参数,大家按照自己的需求修改即可。
这里列举一些常见的颜色。(1,0,0)是红色,(0,0,1)是蓝色,(1,1,0)是黄色,(0,1,0)是绿色。
actor->GetProperty()->SetColor(1, 0, 0);
下面这行代码则可以设置射线的粗细。其中,10是参数,大家按照自己的需求修改即可,数值越大,射线越粗。
actor->GetProperty()->SetLineWidth(10);
最后附上完整代码,希望能帮到各位小伙伴哦~
#include <vtkSmartPointer.h>
#include <vtkLineSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
int main(int, char*[])
{
// 创建一个vtkRenderWindow和vtkRenderer
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
// 创建一个vtkRenderWindowInteractor
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
// 创建一个vtkLineSource,定义射线的起点和终点
vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();
lineSource->SetPoint1(0, 0, 0); // 起点坐标
lineSource->SetPoint2(1, 1, 1); // 终点坐标
// 创建一个vtkPolyDataMapper将数据映射到渲染器
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(lineSource->GetOutputPort());
// 创建一个vtkActor并将映射器设置给它
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
// 设置actor的颜色
actor->GetProperty()->SetColor(0, 1, 0);
// 设置actor的粗细
actor->GetProperty->SetLineWidth(10);
// 添加actor到渲染器
renderer->AddActor(actor);
// 设置渲染器的背景颜色
renderer->SetBackground(0.1, 0.1, 0.1);
// 渲染场景并启动交互
renderWindow->Render();
renderWindowInteractor->Start();
return 0;
}