VTK针对PolyData数据进行法线运算

2020-03-15 11:41:22|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:VTK|来源:唯设编程网

高洛德着色(Gouraud Shaing)可对3D模型各顶点的颜色进行平滑、融合处理,将每个多边形上的每个点赋以一组色调值,同时将多边形着上较为顺滑的渐变色,使其渲染效果与平面着色(Flat Shading)相比,具有更强烈的实时感和立体动感,但该算法依赖顶点的法线。

VTK使用vtkPolyDataNormals算法对多边形网格求法线,该算法的内部机理是依次计算每个多边形的法线,将顶点的法线赋值为相邻多边形法线的平均值,如果需要保留锐边,需要通过SetFeatureAngle函数定义对应的角度,并调用SplittingOn函数。该算法的FlipNormals属性可以对法线和多边形网格的顺序反向。下面是基于Python语言该算法的具体用法:

    normals2 = vtk.vtkPolyDataNormals()
    normals2.SetInputConnection(fran.GetOutputPort())
    normals2.FlipNormalsOn()

    normMaper2 = vtk.vtkPolyDataMapper()
    normMaper2.SetInputConnection(normals2.GetOutputPort())

    normActor = vtk.vtkActor()
    normActor.SetMapper(normMaper2)
    normActor.GetProperty().SetColor(1.0, 0.49, 0.25)

    ren2 = vtk.vtkRenderer()
    ren2.SetViewport(0.5, 0.0, 1.0, 0.5)
    ren2.AddActor(normActor)

实现效果如下:

VTK对PolyData数据处理

左下角是原始图片,右下角是法线计算后的效果,左上角是光顺的效果,右上角是离散采样的效果。

发表评论0条 】
网友评论(共?条评论)..
VTK针对PolyData数据进行法线运算