当前位置: 首页 > news >正文

3D数据过滤为2D数据集并渲染


开发环境

  1. Windows 11 家庭中文版
  2. Microsoft Visual Studio Community 2019
  3. VTK-9.3.0.rc0
  4. vtk-example
  5. 参考代码

代码逻辑:初始化数据集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;
}

相关文章:

  • LeetCode|动态规划|1035. 不相交的线 、53. 最大子数组和
  • 【智能座舱系列】- 深度解密小米Hyper OS,华为HarmonyOS区别
  • 前端CSS
  • 数据结构学习笔记——链式表示中的双链表及循环单/双链表
  • 第19期 | GPTSecurity周报
  • 【计算机视觉】3D视觉
  • kkfileview安装部署Linux(CentOS、Debian)
  • 中文编程工具免费版下载,中文开发语言工具免费版下载
  • Python自动化运维监控——批量监听页面发邮件(自由配置ini文件+smtplib)
  • STM32 APP跳转到Bootloader
  • 天线测试解决方案-毫米波片上天线测量系统
  • Http代理与socks5代理有何区别?如何选择?(一)
  • 基于知识库的chatbot或者FAQ
  • 【ELFK】之Filebeat
  • 在虚拟机centos7中部署docker+jenkins最新稳定版
  • 如何保证分布式情况下的幂等性
  • HTML列表
  • 【Cargo Therapeutics】申请1亿美元纳斯达克IPO上市
  • 任正非说:如此华为公司怎么会垮掉呢?我坚信华为红旗永不倒!
  • python企业微信小程序发送信息
  • 多语言网站源码/外贸企业网站制作哪家好
  • 网站备案号如何查询/如何制作付费视频网站
  • 漳州做网站含博大选/百度seo官网
  • 有什么发布做投标报价的网站/宁波正规seo推广
  • 龙岩网站建设较好的公司/论坛推广
  • 湖州做网站推广的公司/女生seo专员很难吗为什么