3D数据过滤为2D数据集并渲染
- 开源代码
- 2025-08-15 05:06:01

开发环境:
Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码代码逻辑:初始化数据集points -> 添加数据集到polydata -> 通过vtkVertexGlyphFilter过滤(带顶点、单元数据)polydata为顶点数据 -> 添加过滤后2D数据到vtkPolyDataMapper2D -> 添加到vtkActor2D
Actor2D:
#include <vtkActor2D.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkPoints.h> #include <vtkPolyData.h> #include <vtkPolyDataMapper2D.h> #include <vtkProperty2D.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderer.h> #include <vtkVertexGlyphFilter.h> int main(int, char*[]) { vtkNew<vtkNamedColors> colors; vtkNew<vtkPoints> points; points->InsertNextPoint(10, 10, 0); points->InsertNextPoint(100, 100, 0); points->InsertNextPoint(200, 200, 0); /* VtkPolyData 是一个数据对象,它是 vtkDataSet 的具体实现。 VtkPolyData 表示由顶点、直线、多边形和/或三角形条组成的几何结构。 点和单元属性值(例如,标量、向量等)也被表示。 */ vtkNew<vtkPolyData> polydata; polydata->SetPoints(points); std::cout << "NumberOfCells: " << polydata->GetNumberOfCells() << std::endl;//0 此时还没有指定cell std::cout << "NumberOfPoints: " << polydata->GetNumberOfPoints() << std::endl;//3 /* 这个过滤器丢弃输入中的所有单元格,并在每个点上用一个顶点替换它们。 这个过滤器的预期用途大致相当于 vtkGlyph3D 过滤器,只不过这个过滤器是专门针对具有许多顶点的数据的,这使得渲染结果比字形过滤器更快,更少混乱。 这个过滤器可以采用图形或点集作为输入。 */ vtkNew<vtkVertexGlyphFilter> glyphFilter; glyphFilter->SetInputData(polydata);//vtkDataObject->vtkPolyData glyphFilter->Update(); /* VtkPolyDataMapper 是一个将多边形数据(即 vtkPolyData)映射到图形原语的类。 VtkPolyDataMapper 作为特定于设备的多边形数据映射器的超类,它实际上执行到渲染/图形硬件/软件的映射。 vtkPolyDataMapper用来把输入的数据进行转换为几何图元(点、线、多边形)进行渲染 VtkPolyDataMapper2D 是一个映射器,它将3D 多边形数据(vtkPolyData)渲染到2D 图像平面(即渲染器的 viewport)上。默认情况下,通过忽略 vtkPolyData 中3D 点的 z 坐标,并将 x-y 值作为本地显示值(即像素坐标) ,将3D 数据转换为2D 数据。 */ vtkNew<vtkPolyDataMapper2D> mapper; mapper->SetInputConnection(glyphFilter->GetOutputPort()); mapper->Update(); //VtkActor2D 与 vtkActor 类似,但是它用于二维图像和注释。 vtkNew<vtkActor2D> actor; actor->SetMapper(mapper); actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData()); actor->GetProperty()->SetPointSize(8); // Create a renderer, render window, and interactor. vtkNew<vtkRenderer> renderer; vtkNew<vtkRenderWindow> renderWindow; renderWindow->AddRenderer(renderer); vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; renderWindowInteractor->SetRenderWindow(renderWindow); // Add the actor to the scene renderer->AddActor(actor); renderer->SetBackground(colors->GetColor3d("DarkSlateGray").GetData()); renderWindow->SetSize(300, 300); renderWindow->SetWindowName("Actor2D"); // Render and interact renderWindow->Render(); renderWindowInteractor->Start(); return EXIT_SUCCESS; }3D数据过滤为2D数据集并渲染由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“3D数据过滤为2D数据集并渲染”