Shortest path 代码

article/2025/9/8 21:04:51

Project

https://graphics.cs.utah.edu/research/projects/shortest-path-to-boundary/

Build and Debug

Fork:(在Win10上)
https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes

commit hash
d3160168d2b6a58188d12e6cd959da0ac9b56e95

./vscode/launch.json
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “(msvc) Launch”,
“type”: “cppvsdbg”,
“request”: “launch”,
// Resolved by CMake Tools:
“program”: “ w o r k s p a c e F o l d e r / b u i l d / D e b u g / S h o r t e s t − P a t h − T e s t . e x e " , " a r g s " : [ " T e s t D a t a / P a r a m e t e r s . j s o n " , " T e s t D a t a / I n t e r s e c t i n g S h a p e . t " ] , " s t o p A t E n t r y " : t r u e , " c w d " : " {workspaceFolder}/build/Debug/Shortest-Path-Test.exe", "args": ["TestData/Parameters.json", "TestData/IntersectingShape.t"], "stopAtEntry": true, "cwd": " workspaceFolder/build/Debug/ShortestPathTest.exe","args":["TestData/Parameters.json","TestData/IntersectingShape.t"],"stopAtEntry":true,"cwd":"{workspaceFolder}”,
“environment”: [
{
// add the directory where our target was built to the PATHs
// it gets resolved by CMake Tools:
“name”: “PATH”,
“value”: “ e n v : P A T H : {env:PATH}: env:PATH:{command:cmake.getLaunchTargetDirectory}”
},
],
“console”: “internalConsole”,
}
]
}

Code Explain

Test.cpp中是入口main函数
40行之前是初始化(mesh和param)
在这个for loop当中查找每个Vert的最近点。

在这里插入图片描述

关键的函数
dcd.vertexCollisionDetection(iV, meshId, &colDecResult);
用BVH做碰撞检测。(Broad Phase)

dcd.closestPointQuery(&colDecResult, &queryResult);
用碰撞检测后的结果查找最近点。(Narrow Phase)

Broad Phase:vertexCollisionDetection

核心就rtcPointQuery,调用的是intel embree的API

D:\Dev\Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes\ShortestPath\CollisionDetector\DiscreteCollisionDetector.cpp
L598

https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes/blob/5be890b7775dc92cde410895d124c81162bee978/ShortestPath/CollisionDetector/DiscreteCollisionDetector.cpp#L598

在这里插入图片描述

在这里插入图片描述

Narrow Phase: closestPointQuery

https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes/blob/5be890b7775dc92cde410895d124c81162bee978/ShortestPath/CollisionDetector/DiscreteCollisionDetector.cpp#L621

在这里插入图片描述

其中较为关键的是idTetIntersected,表示相交的四面体的id。intersectedTets则是所有相交四面的的array。

执行查询最近点:
rtcPointQuery(surfaceMeshScenes[idTMIntersected], &query, &context, nullptr, (void*)pClosestPtResult); 仍然是用API来查询点。目的是针对某个表面网格(surfaceMeshScenes[idTMIntersected]),找到距离查询点最近的表面点,并把结果存储在 pClosestPtResult 中。
在这里插入图片描述

接下来是存储找到的最近点的信息:其face id, 坐标, barycentric coord.
在这里插入图片描述

另外,rtc是根据注册机制自动调用一些hook函数的例如比较关键的是

其中checkTetTraverse这个flag表示检查四面体的遍历,正是文中提到的连接性检测(valid path)
在这里插入图片描述


http://www.hkcw.cn/article/BbcSYIYKHk.shtml

相关文章

Spring框架学习day1--基础概念

Spring基础部分**轻量级的**IOC:控制反转(对象由自己管理变成交给框架管理)AOP:面向切面编程一站式BaenSpring体系结构 Spring Hello World 搭建 Spring基础部分 Spring是一个轻量级的IOC、AOP的一站式java开发框架,为…

立志成为一名优秀测试开发工程师(第九天)——使用fiddler工具、request库进行接口测试

接口测试学习 目录 一、接口测试的介绍 二、抓包软件Fiddler的使用 三、使用Python的Request库发送get、post请求: 1.get请求 2.post请求 四、总结 登录接口实现 认证请求处理 异常处理 高级配置 接口测试工具类封装 测试用例设计规范 Cookie处理方案 …

【面板数据】各地区新型数字基础设施数据集(2002-2025年)

新型数字基础设施是利用新一代信息技术(如5G、人工智能、物联网、大数据、区块链等)构建的基础设施体系,主要服务于信息传输、计算存储、智能分析和融合应用等环节。新型数字基础设施作为引领经济社会数字化转型的重要支撑,在各地…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

zynq ad7616 调试笔记

环境 zynq7020 ps端的spi外接硬件的ad7616模块(非ip核) 1 下载 https://github.com/analogdevicesinc/no-OS/blob/2019_R1/ad7616-sdz/ad7616_sdz.c 2 在zynq的sdk中新建ad7616的app程序,将上图方框中的文件拷贝过来并编译 3 移植 ad7616…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时,您可能希望将iPhone备份到外部硬盘上,这样可以快速释放iPhone上的存储空间,而不占用电脑上的空间,并为您的数据提供额外的安全性。此外,我们还提供 4 种有效的解决方案&#xff…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…

Socket编程基础

这篇博客我们主要用来讲解TCP和UDP的socket编程。 概念 大多数网络协议都是由软件实现的(特别是协议栈中的高层协议),而且绝大多数计算机系统都将运输层以下的网络协议在操作系统的内核中进行实现。应用程序要想执行网络操作,必…

什么是物化视图(Materialized View)?

分析师和工程师经常面临一个共同的困境:随着数据量激增,查询性能急剧下降。一个看似简单的多表联合查询可能需要耗时数分钟甚至数小时,一个常规的实时大屏可能因数据处理缓慢而失去时效价值。当数据规模从 GB 级增长到 TB 甚至 PB 级时&#…

USB Redirector对比国产USB Server方案:软硬之争与技术突围

在远程设备共享领域,‌USB Redirector‌以其轻量级跨平台特性长期占据国际主流市场,支持Windows/Linux系统下的无缝USB设备网络共享。然而,随着国产化替代需求的爆发,以‌朝天椒USB Server‌为代表的软硬一体化方案,凭…

PP-OCRv5 C++封装DLL C#调用源码分享

目录 说明 效果 C#调用效果 项目 C# C 头文件 源文件 C#调用 下载 说明 C封装DLL&#xff0c;C#调用源码分享 效果 C#调用效果 项目 C# C 头文件 #include <windows.h> #include <iostream> #include <opencv2/opencv.hpp> #include <stri…

RISC-V PMA、PMP机制深入分析

1 PMA PMA&#xff08;Physical Memory Attributes&#xff09;&#xff0c;物理内存属性&#xff0c;顾名思义就是用来设置物理内存属性的&#xff0c;但这里说“设置”&#xff0c;并不合理&#xff0c;因为一般情况下各存储的属性&#xff0c;在芯片设计时就固定了&#xf…

桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章

在幼儿教育领域&#xff0c;运动能力的培养与健康监测始终是备受关注的核心环节。随着科技的飞速发展&#xff0c;如何科学、有效地监测幼儿的运动状态&#xff0c;成为了幼儿园教育者面临的一大挑战。桂花网体育运动监测方案凭借其高效、精准、智能化的特性&#xff0c;为幼儿…

第6讲、 Odoo 18 `tools` 模块深度分析

Odoo 18 中的 odoo/tools 目录是核心工具模块的集合&#xff0c;封装了大量通用功能&#xff0c;包括数据处理、安全校验、缓存优化、文件处理、时间转换、国际化、多线程处理等。这些工具模块在整个 Odoo 框架中被频繁引用&#xff0c;是系统高效运行和代码解耦的重要基础。 &…

如何在矩池云实例上开启应用服务的访问端口

AI 应用开发越来越火热&#xff0c;矩池云平台上也相应出现了越来越多的 AI 应用开发者&#xff0c;这里详细介绍下大家在使用过程中经常遇到的一个问题&#xff1a;在矩池云的实例上&#xff0c;如何为应用服务开启外部可访问的端口&#xff1f; 根据开发者有没有启动实例&…

首发支持! 基于昇腾MindIE玩转InternVL3多模态理解最新模型

2025年4月16日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;升级并开源了通用多模态大模型书生万象3.0&#xff08;InternVL3&#xff09;。通过采用创新的多模态预训练和后训练方法&#xff0c;InternVL3 多模态基础能力全面提升&#xff0c;在专家级基…

深入解析Java8核心新特性(Optional、新的日期时间API、接口增强)

文章目录 前言一、Optional&#xff1a;优雅处理null1.1 Optional设计哲学1.2 Optional基础操作1.3 Optional链式操作1.4 高级应用1.5 Optional实战案例 二、新的日期时间API&#xff1a;解决历史痛点2.1 java.time 设计哲学与核心架构2.2 核心类详解与使用基本日期时间类时区相…

深入理解C#中的委托与事件:从基础到高级应用

在C#编程语言中&#xff0c;委托和事件是两个强大且独特的特性&#xff0c;它们为方法封装、回调机制和事件驱动编程提供了语言级别的支持。作为.NET框架的核心组件&#xff0c;委托和事件广泛应用于Windows Forms、WPF、ASP.NET等各类应用程序中。本文将全面探讨委托与事件的概…

设备制造行业项目管理难点解析,如何有效解决?

在设备制造行业&#xff0c;项目管理是企业运营的核心环节&#xff0c;直接影响项目交付效率、成本控制和盈利能力。然而&#xff0c;由于行业特性复杂、项目周期长、涉及部门多&#xff0c;企业在实际操作中常常面临诸多管理痛点。金众诚工程项目管理系统&#xff0c;依托金蝶…

如何应对客户对项目进度的过度干预

当客户对项目进度进行过度干预时&#xff0c;企业应采取明确项目边界、建立透明沟通机制、提升客户信任感、提供详实进度报告等措施。其中&#xff0c;明确项目边界尤为关键&#xff0c;它能有效帮助企业和客户共同确认项目的权责范围&#xff0c;防止客户的过度干预影响项目整…