2020-03-15 11:41:22|?次阅读|上传:wustguangh【已有?条评论】发表评论
高洛德着色(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)
实现效果如下:
左下角是原始图片,右下角是法线计算后的效果,左上角是光顺的效果,右上角是离散采样的效果。