这篇笔记和《VTK笔记——数据抽取(vtkDecimatePro)》一样,也是对三角形网格数据的抽取。
vtkQuadricDecimation
vtkQuadricDecimation是一个用于削减三角形数量的类,然后得到一个很好的近似原始形状的几何。也是采用边塌陷方法来剔除顶点和三角面片。但误差度量方式是二次误差度量。二次误差度量常常被认为是比较好的误差度量方式。
vtkQuadricDecimation是基于Garland和Heckbert在Siggraph '97论文"Surface Simplification Using Quadric Error Metrics"上提出的二次误差度量来实现的。对应算法细节,也可以参考Hughues Hoppe’s 在Vis '99的论文, “New Quadric Metric for Simplifying Meshes with Appearance Attributes” 。
用法
使用这个类,同样需要指定TargetReduction。它代表是要削减的三角形的百分比(范围为0到1)。
auto decimate = vsp<vtkQuadricDecimation>::New();
decimate->SetInputData(inputPD);
decimate->SetTargetReduction(reduciton);
decimate->Update();
另外,vtkQuadricDecimation的输入只能是三角形网格数据,如果是多边形数据,一开始要将它三角化(vtkTriangleFilter )。
auto triangles = vsp<vtkTriangleFilter>::New();
triangles->SetInputConnection(reader->GetOutputPort());
triangles->Update();
其它的参数:
SetAttributeErrorMetric
SetVolumePreservation
示例
下面的演示了对一只牛模型进行数据抽取后的效果及数据大小的对比:


QuadricDecimation.cxx
#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkSphereSource.h>
#include <vtkTriangleFilter.h>
#include <vtkQuadricDecimation.h>
#include <vtkNamedColors.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkCamera.h>
#define vsp vtkSmartPointer
int main(int argc, char* argv[])
{
vsp<vtkPolyData> inputPD;
if (argc > 1
2934


&spm=1001.2101.3001.11974&articleId=109043749&d=1&t=3&u=83faf076a48f4bc08029ff023eb68e08)

被折叠的 条评论
为什么被折叠?



