繁体   English   中英

使用给定的3D顶点绘制(2D)多边形并使用VTK进行变换

[英]Draw (2D) Polygon with given 3D-Vertices and Transformation with VTK

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

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

最好的方法是vtkPolyLineSource之类的类,在这里我只需要一个多边形列表即可。 但据我所知,vtkPolyLineSource只会画线,而不会用颜色填充多项式。

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

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

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM