【VTK】vtkPolyDataNormals 计算法向量

本文介绍了如何使用VTK库中的vtkPolyDataNormals计算3D模型(如正方体和球体)的点和单元法向量。通过示例代码展示了在正方体和球体上应用该工具,以及使用vtkGlyph3D显示点的法向量。文章提供了完整的代码示例链接,并提到了markdown编辑器的图片居中问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vtkPolyDataNormals可以用于计算poly data中points和cell的法向量,方便处理一些数据集。
下面的例子显示了vtkPolyDataNormals作用在正方体和球体的效果。

注:为了不影响阅读体验,此文仅展示关键代码,所有例子的完整代码和输出可以浏览:【VTK】vtkPolyDataNormals example

正方体

人为构造6个面的正方体,每一个cell是一个正方形。使用points和polys构造polydata,之后使用vtkPolyDataNormals 处理polydata。由此我们能够得到point的在mesh上的的normal和cell的normal。

int main(int argc, char *argv[])
{
// ...
    vtkSmartPointer<vtkPolyData> pd =
            vtkSmartPointer<vtkPolyData>::New();
    pd->SetPolys( polys );
    pd->SetPoints( points );
    vtkSmartPointer<vtkPolyDataMapper> mapper =
            vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData( pd );

    vtkSmartPointer<vtkActor> surfaceActor =
        vtkSmartPointer<vtkActor>::New();
    surfaceActor->SetMapper( mapper );

    vtkSmartPointer<vtkPolyDataNormals> pdNormals =
            vtkSmartPointer<vtkPolyDataNormals>::New();
    pdNormals->SetInputData( surfaceActor->GetMapper()->GetInput() );
    pdNormals->ComputeCellNormalsOn();
    pdNormals->Update();

    vtkPointData* ptData = pdNormals->GetOutput()->GetPointData();
    vtkDataArray* ptNormals = pdNormals->GetOutput()->GetPointData()->GetNormals();

    cout << "For points in every cell: \n";
    cout << ptNormals->GetNumberOfTuples() << endl;
    for( 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值