VTK笔记——数据抽取(vtkQuadricDecimation)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这篇笔记和《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
vtkQuadricDecimation测试 vtkQuadricDecimation网格抽取(简化) 阅读详情

相关推荐

VTK笔记——数据抽取vtkDecimatePro)

多边形数据,特别是三角形网格是常被用到的数据格式。有时会面临网格数据大,难以处理这样的问题,比如在一些交互使用中难以快速响应。为了解决这类问题,就会用到数据抽取技术。 抽取也被称作多边形削减,网格简化或者多分辨率建模,其在于保持近似的原始网格条件下对三角网格的三角形进行削减。

Andy的专栏 2934

VTKExamples::Meshes】第十二期 QuadricDecimation

本文分享VTK样例QuadricDecimation,并解析接口vtkQuadricDecimation,希望对各位小伙伴有所帮助!

qq_40041064的博客 315

VTK PolyData 重采样 数据抽取 vtkDecimatePro

VTK支持三种消减方法,vtkDecimatePro,vtkQuadricClustering和vtkQuadricDecimation。尽管每一种都有各自的优缺点,但在应用上基本都一致。它的思想基于Siggraph2000中的论文“Out-of-Core Simplification of Large Polygonal Models”。它能够高速的消减大网格模型。并且支持网格片段消减(利用StartAppend(), Append()和EndAppend()方法)。这样能够避免读取整个模型到内存中。

q610098308的专栏 1550

VTK笔记——数据抽取vtkQuadricClustering)

前两篇笔记VTK笔记——数据抽取vtkDecimatePro)》、《VTK笔记——数据抽取vtkQuadricDecimation)》讲述了数据抽取,主要是对三角网格,而且是不太大的数据进行处理。那这边笔记我们来看下大数据数据抽取

Andy的专栏 1574

三维网格精简算法(Quadric Error Metrics)附源码(一)

本文转自:http://www.cnblogs.com/shushen/p/5311828.html 我发现他的一系列文章都挺好,就是总缺点东西,所以没法执行 本文的算法来源于 Michael Garland在97年的文章 Surface simplification using quadric error metrics 算法介绍在计算机图形应用中,为了尽可能真实呈现虚拟物体,往往

拉风小宇的博客 2万+

VTK- Decimate网格抽取

3-matic中的Remesh功能在保留实体几何形状的同时对其进行Remesh。VTK中能保留几何形状又能改变网格点集的Filter有Decimate相关的Filter。本博文研究VTK中关于Decimate网格抽取相关的Filter。

qq_40041064的博客 1652

VTK修炼之道52:图形基本操作进阶_多分辨率策略(模型抽取的三种方法)

1.多分辨率处理策略 模型抽取Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是减少模型中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不

沈春旭的博客 4890

VTK_Learning_图形基本操作进阶_多分辨率策略(模型抽取的三种方法)

1.多分辨率处理策略 模型抽取Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是减少模型中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不断细化...

weixin_38293453的博客 592

VTK知识学习(43)- 多分辨率处理

模型抽取(Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨率处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是减少模型数据中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不断细化出新的网格单元,在极限细化情况下,该网格能够收敛于一个光滑曲面。

weixin_45114627的博客 1051

VTL:图形基本操作进阶——多分辨率策略(模型抽取的三种方法)

1.多分辨率处理策略 模型抽取Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨率处理中的两个重要的操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是剑豪模中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像时数据的将采样。而网格细化则是利用一定的细化规则。而网格细化则是利用一定的细化规则,在给定的初始化 网格中插入新的点,从而不断细化出新的网格单元,在极限细化情况下,该网格能够收敛一个光滑的曲面。 2.网

m0_45306991的博客 756

VTK-抄书笔记(6)中

右图为填补后的结果。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不断细化出新的网格单元,在极限细化情况下,该网格能够收敛于一个光滑曲面。vtkDecimatePro接收一个单元为三角网格vtkPolyData数据,其中函数SetTargetReduction()用于设置变量TargetReduction的大小,将网格面片抽取的比例控制在0~1,这里设置为0.5,说明有50%的三角面片单元将被移除。如果一个模型中含有边界边,则说明该模型不是封闭的,如本例中的模型。

qq_51627050的博客 1026

vtk中用于网格简化的网格抽取或减面的类

在进行大体量的网格模型渲染时,为了提高渲染效率,可以在保证网格基本几何特征不丢失的前提下,进行网格抽取或减面操作。vtk中提供了若干类用于实现该功能,按照处理方式,可以分为两类。效率较高,但是不能保存几何特征。特点是可以保持几何特征。

ljy338的博客 817

VTK编程指南<十七>:VTK模型精简Decimation和细化Subdivision

VTK编程指南<十七>:VTK模型精简Decimation和细化Subdivision

欧特GO 633

第05章-可视化技术(3)

【译者:这个系列教程是以Kitware公司出版的《VTK User’s Guide -11th edition》一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),因为时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容。敬请期待^_^。欢迎转载。另请转载时注明本文出处。谢谢合作!同一时候,因为译者水平有限,出错之处在所难...

weixin_30487317的博客 173

QEM网格简化算法学习

边收缩的结果就是将两个顶点合成一个顶点,因此可以按照任意的顶点数目去简化网格。所以前面讲到的保存每个顶点关联的面的集合,实际上就是保存这些面对应的矩阵之和,而边收缩的过程中,新的顶点需要保存的,就是旧的两个顶点保存的矩阵之和。假如只有一个平面三角形,当它的一个顶点A有一个微小的偏移时,这个顶点相对于对边BC的距离h也会发生变化,因此可以用h来度量点A的“变形程度”,亦即。也许当A的位移平行于BC时,用h无法表示这样的变形,但是这只是一种思想,既考虑了简洁性,也考虑了在实际变形中大概率不会有这种特殊的变形。

dragonylee的博客 1758

surface simplification using quadratic error metrics

这篇论文主要讲如何简化mesh, 有对应的实现代码qslim: https://www.cs.cmu.edu/~./garland/quadrics/qslim.html 大概讲下这篇文章 边退化第一步就是要选择边, 那么怎么选择呢按照3.2的条件去选择 选完了边, 要把两个点合成一个点, 那么合成后的点在什么位置呢 用公式(1)去求, 但是公式(1)需要构造一个矩阵, 这个矩阵怎么构造呢

十年磨一剑 1254

Open3D(C++) 模型简化——网格抽取

使用二次误差度量抽取简化网格

点云侠的博客 1068

Open3D 网格抽取网格简化,Python版本)

Open3D 网格抽取网格简化,Python版本)

dayuhaitang1的博客 682
上一篇: VTK笔记——数据抽取(vtkDecimatePro)
下一篇: VTK笔记——数据抽取(vtkQuadricClustering)
Andy3dcpp
博客等级 码龄17年 218粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值