网格简化 一、 常见减面算法简介

2023-11-21 14:10

本文主要是介绍网格简化 一、 常见减面算法简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为最近公司的项目需要所以研究了一下减面,因为之前减面是调用的第三方的api基于别人的平台所以公司现在想自己做一个出来。不过一句话没有最优的算法都是看需求来的,而且往往还是需要与LOD相互结合起来的~

网格简化可以减少网格的三角片数量,同时尽量保持住网格的几何信息或其它属性(如纹理)。它是网格处理里的经典问题,广泛应用于各个领域:
* 游戏领域:游戏场景里的网格都很简单,适合快速渲染;简单的模型也适合快速的物理碰撞检测
* 多分辨率加载模型(Level of Detail)
* 三维模型的网页展示

进行网格简化的原因大概有几个方面:

  1. 节省存储空间每个三角面在空间储存的大小是一样的,减少三角面的数目,就减少了模型保存的文件大小,如果进行网络传输则大大缩短网络传输时间。
  2. 简化后续处理步骤如果后续要对模型进行一些计算,例如贴纹理,在最终效果基本上不变的情况下,计算时间会大量的缩短。
  3. 节省渲染时间当我们想要显示模型的时候,需要对模型的每个三角面进行空间渲染,需要大量的计算,三角面的数目减少,在不影响显示效果的情况下,会大大的减少渲染计算的负担。对于一个500MB的模型,一般4G内存的显卡就已经能感觉到卡顿了。所以如果玩高逼真的主机游戏还是需要非常厉害的显卡的。
  4. 去除不需要不关心的细节部分比如对于一面墙,墙上有一些小凹凸,但是对用使用者来说并不关系,更希望能够删除掉这些部分,来优化视觉效果,网格简化通常能够达到这些效果。

在了解到什么是网格简化以及为什么要进行网格简化后,那么什么时候一个好的网格简化算法呢?一个好的网格简化算法,需要在这几个方面进行度量:
* 简化后网格与初始网格的相似度,越高越好
* 简化到同等网格数,时间越短越好
* 在同等相似度下,网格数目越少越好

基本的删除方法:

**顶点删除法:**删除网格中的一个顶点,然后对它相邻三角形形成的空洞,进行三角刨分
在这里插入图片描述

**删边(边坍塌 折叠法):**将网格里面的一条边压缩为一个顶点,退化了该边相邻的两个三角形

在这里插入图片描述

**删面(三角面片坍塌):**将网格内的一个面片收缩为一个顶点,退化了该面片以及临边的三个面片
在这里插入图片描述

参考资料

塌边法QEM算法

这篇关于网格简化 一、 常见减面算法简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402802

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹