模型体素化

背景:

在三维模型深度处理的时候,有时候需要对模型进行区域划分.并赋予一定的材质,力学等属性,所以,需要对模型进行划分.

目前的模型体素化的方式基本分为cpu,gpu,都是投影射线法进行的, 在调研了一些已知的开源算法和项目,并测试后发现,大部分的开源项目也都是基于抽壳进行的计算,并不满足自己项目(岩土,GIS)等方面的要求,所以这里自己按照已有的理论,进行了修改,从而做了一个空间内部填充的全体素化,而且后续也方便进行不规则体素的操作.里面使用了bsvtree进行加速处理.

结果:

改两个参数:的效果.

计算时间加长了一点,不过很多细节保留了下来

换个模型试一下:

实现过程以及关键代码:

计算流程:

1.实现流程,求解模型的OBB盒子,按照其最大面积那个面,按照sizeX,sizeY进行拆分.

2.计算一系列等距射线,构建bsvTree进行模型结构化,进行快速求交,

3.获取交点后,处理交点为1和>1的多种情况,按照射线法向,进行距离迭代插值判定,依据奇偶规则进行区分内外盒子.到此,模型内外以及壳表面区分完成,进行体素绘制;

关键代码:

	mDimStartZ = 0;int GetInterCheckFirst = 0;//我们获取当前的.double threoldValue = gridSizePerDim[2] / 2.0;//阈值./// <summary>/// 获取尺寸数据./// </summary>SigleT defalutData;defalutData.zL = 0;defalutData.isStatus = false;auto GetInterData = [&](int index)-> decltype(&interSectListL[0]) {if (index < interSectListL.size()){return &interSectListL[index];}else{return nullptr;}};SigleT*firstCheckData = nullptr;//获取第一个值.SigleT*secondChckData = nullptr;//全部体素,第三个循环bool isOpenAddStatus = false;while (mDimStartZ < ZLength){firstCheckData = GetInterData(GetInterCheckFirst);if (firstCheckData == nullptr){mDimStartZ += gridSizePerDim[2];continue;}CurP[0] = FaceStartPoint[0] + mDimStartX;CurP[1] = FaceStartPoint[1] + mDimStartY;CurP[2] = FaceStartPoint[2] + mDimStartZ;if (intersecCount == 1){CurP[2] = FaceStartPoint[2]+ firstCheckData->zL;AddVoxelDatas(CurP.GetData());//创建.break;}else{secondChckData = GetInterData(GetInterCheckFirst + 1);if (secondChckData == nullptr){mDimStartZ += gridSizePerDim[2];continue;}double firstDiffer = mDimStartZ - firstCheckData->zL;//取负数double secondDiffer = mDimStartZ - secondChckData->zL;double absValue = std::abs(firstDiffer);if (absValue < threoldValue)//横切边界.{AddVoxelDatas(CurP.GetData());isOpenAddStatus = true;//激活.}else //填充.{if (isOpenAddStatus == true){AddVoxelDatas(CurP.GetData());}}if (secondDiffer > 0)//奇偶变换.{GetInterCheckFirst++;isOpenAddStatus = false;//每次变换,关闭,直到下一次循环激活为止.}}mDimStartZ += gridSizePerDim[2];}

到此,任意模型体素化代码完成.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/57014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 应用申请 Google MBA权限

Google Case链接&#xff1a;89 > 34810 > 30025 > 155353 > Handheld > MBA Policies 按照指引填写模板 This bug is for the approval of MBAs under [13.2.2 Pregrant permissions policy](https://docs.partner.android.com/gms/policies/domains/mba#mba-…

练习LabVIEW第二十二题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第二十二题&#xff1a; 前面板上放一个压力表&#xff0c;指针位置在0-255之间随机变化&#xff0c;指针颜色同时发生变化…

ping的原理是什么?

ping是用来探测本机与网络中另一主机之间是否可达的命令&#xff0c;如果两台主机之间ping不通&#xff0c;则表明这两台主机不能建立起连接。利用ping命令可以检查网络是否通畅或者网络连接速度&#xff0c;很好地分析和判定网络故障。 ping的原理是基于ICMP(Internet Contro…

金融科技助力香港国际市场的多元化发展与风险管理

在金融科技快速发展的推动下&#xff0c;香港作为全球领先的金融中心&#xff0c;不断推动创新与金融科技融合&#xff0c;提升市场多元化和风险管理能力。香港国际市场通过科技手段优化交易流程、提升数据分析能力&#xff0c;逐渐成为全球投资者青睐的投资环境。本文将探讨香…

网络应用技术 实验一:路由器实现不同网络间通信(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验任务及要求 1、任务 1&#xff1a;完成网络部署 2、任务 2&#xff1a;设计全网IP 地址 3、任务 3&#xff1a;实现全网主机互通 六、实验步骤 1、在ensp中部署网络 2、配置各主机 IP地址、子网掩…

【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界

目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛&#xff0c;和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次&#xff1a;个体的某个属性的样本值&#xff0c;服从正态分布…

Java应用程序的测试覆盖率之设计与实现(一)-- 总体设计

一、背景 作为测试,如何保证开发人员提交上来的代码都被测试覆盖到,是衡量测试质量的一个重要指标。 本系列文章将要说一说,如何搭建一套测试覆盖率的系统。 包括以下内容: jacoco agent采集执行覆盖率数据jacoco climaven集成jacoco:jacoco-maven-pluginant集成jacoco:…

学习记录:js算法(七十六):一手顺子

文章目录 一手顺子思路一&#xff1a;贪心算法思路二&#xff1a;动态规划思路三&#xff1a;排序 计数 一手顺子 Alice 手中有一把牌&#xff0c;她想要重新排列这些牌&#xff0c;分成若干组&#xff0c;使每一组的牌数都是 groupSize &#xff0c;并且由 groupSize 张连续的…

【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建

【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建 一、写在前面——为什么写本篇内容二、准备工作——下载源码前的准备2.1 准备基础环境2.2 准备命令行工具2.3 配置git用户凭据 三、下载OpenHarmony轻量系统最小源码3.1 使用ssh协议下载&#xff08;推荐&#xff09;3.2 …

SQL、MySQL、SQL Server的区别

SQL&#xff08;Structured Query Language&#xff09; SQL是一种标准化的编程语言&#xff0c;用于管理和操作关系数据库。 它用于插入、更新、查询和删除数据库中的数据。 SQL是独立于数据库的&#xff0c;这意味着同一个SQL命令可以在不同的数据库系统中使用&#xff0c…

c#获取目录下所有文件

c#获取目录下所有文件 一&#xff1a;Directory.GetFiles方法&#xff1a; var dirPath CommonMethod.GetDirectoryByType(FileTypeEnum.PowerTest); //获取目录下所有文件 var fileList Directory.GetFiles(dirPath, "*.*", SearchOption.AllDirectories).ToLis…

【Vue】Vue3.0(十五)Vue 3.0 中 hooks 的概念

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年10月22日21点50分 背景&#xff1a;在一些情况下&#xff0c;前台的组件是可以复用的&#xff0c;那这些复用的对象和数据&#xff0c;为…

学习记录:js算法(七十七):合并若干三元组以形成目标三元组

文章目录 合并若干三元组以形成目标三元组思路一 合并若干三元组以形成目标三元组 三元组 是一个由三个整数组成的数组。给你一个二维整数数组 triplets &#xff0c;其中 triplets[i] [ai, bi, ci] 表示第 i 个 三元组 。同时&#xff0c;给你一个整数数组 target [x, y, z]…

Prompt Engineering (Prompt工程)

2 prompt工程2大原则 2.1 给出清晰&#xff0c;详细的指令 策略1&#xff1a;使用分割符清晰的指示输出的不同部分&#xff0c;比如"",<>,<\tag>等分隔符 策略2&#xff1a;指定一个结构化的输出&#xff0c;比如json,html等格式 策略3&#xff1a;要…

使用openssl生成自签名证书(多域名)用于https的ssl验证

有时在项目的开发环境和测试环境,并不能获得正式的证书,但是项目的开发和测试又需要证书来模拟生产环境下的安全配置,此时就可以采用自签名证书。而且我们希望我们的证书能够在开发环境和测试环境中完全正常的使用,不会出现各种证书无效的提示和警告。此时就可以参考这里的…

Oracle视频基础1.1.2练习

1.1.2 需求&#xff1a; 查询oracle组件和粒度大小&#xff0c; select component,granule_size from v$sga_dynamic_components;Oracle SGA 中组件和粒度大小查询详解 在 Oracle 数据库的内存结构中&#xff0c;SGA&#xff08;System Global Area&#xff0c;系统全局区&am…

基于SSM房屋租赁管理系统的设计与实现

前言 房屋租赁管理系统&#xff0c;不仅可以改善用户线下到租赁公司进行查看房屋类型的局面以及预约信息等&#xff0c;还可以提供管理效率&#xff0c;同时也可以增强网站的竞争力。利用房屋租赁管理系统&#xff0c;可以有效地提高系统的人事的效率和信息化水平&#xff0c;…

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…

sa-token 所有的异常都是未登录异常的问题

在使用satoken的时候&#xff0c;有这么一个问题&#xff0c;就是不管我是什么错误&#xff0c;都会弹出未登录异常&#xff0c;起初的时候我以为satoken的拦截器会拦截所有的异常&#xff0c;但是今后测试才发现忽略了一点&#xff0c;也是最重要最容易忽视的一点。 如果我现在…

解决JeecgBoot微服务通过Gateway访问Swagger资源出现“Knife4j文档请求异常”

1.问题描述 基于jeecgboot单体版本,参照官方推荐的纯微服务项目拆分指南,对jeecgboot项目进行微服务拆分,将gateway和system模块启动成功后,通过gateway访问访问Swagger接口文档,出现“Knife4j文档请求异常”,如下图: 2.问题定位: 1.浏览器F12打开控制台,查看异常请…