【问题标题】:Draw (2D) Polygon with given 3D-Vertices and Transformation with VTK使用给定的 3D 顶点绘制(2D)多边形并使用 VTK 进行变换
【发布时间】:2016-09-11 14:07:41
【问题描述】:

我有一些 3d 模型,我想分别显示模型的每个面。对于每个面,我都有一个顶点列表(如 pcl::PointCloud)、平移向量(如 Eigen::Vector3f)和旋转矩阵(如 Eigen::Quaternionf)。面可以有不同的形状。它将是矩形、圆形(n-verts 多边形)和梯形。

对于矩形面,到目前为止,我使用了 vtkCubeSource,效果很好。对于圆脸,我也许可以使用 vtkCylinderSource。对于梯形脸,我目前还没有找到解决方案。

最好的方法是像 vtkPolyLineSource 这样的类,我只需要一个所有多边形的顶点列表。但据我所知,vtkPolyLineSource 只会画线,不会用颜色填充多项式。

有没有办法用 vtk 将多边形绘制到 3d 空间中?由于可以直接从文件中绘制3d模型,我认为应该有一种绘制模型(或只是一张脸)的方法,但我至今找不到。那是我第一次接触VTK,所以我认为我只是忽略了正确的课程。

我不只是加载模型文件的一个原因是,我需要不同颜色和不透明度的面(在运行时拒绝)。

【问题讨论】:

    标签: drawing polygon vtk 3d-model


    【解决方案1】:

    使用 vtkPolygon

    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
    // ... fill in your points with n points
    
    // Create the polygon
    vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New();
    polygon->GetPointIds()->SetNumberOfIds(n); 
    for (int j = 0; j < n; j++)
    {
        polygon->GetPointIds()->SetId(j, j);
    }
    // Add the polygon to a list of polygons
    vtkSmartPointer<vtkCellArray> polygons = vtkSmartPointer<vtkCellArray>::New();
    polygons->InsertNextCell(polygon);
    
    // Create a PolyData
    vtkPolyData* polygonPolyData =  vtkPolyData::New();
    polygonPolyData->SetPoints(points);
    polygonPolyData->SetPolys(polygons);
    
    // create mapper and actor using this polydata  - the usual stuff
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多