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

2023-11-21 14:10

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

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

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

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

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

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

基本的删除方法:

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

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

在这里插入图片描述

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

参考资料

塌边法QEM算法

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



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

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S