Shortest path 代码

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.pswp.cn/news/907414.shtml

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

相关文章

AMBA总线家族成员

在AMBA总线协议体系中,AXI4虽然是最新且性能最强的总线协议,但AHB和APB仍然被广泛使用,主要原因在于​​场景适配性、资源优化和系统兼容性​​的综合考量。以下是具体分析: AMBA 1‌:仅包含ASB和APB1。‌AMBA 2‌&am…

前端高频面试题1:HTML/CSS/浏览器/计算机网络

目录 1.为什么会出现margin塌陷? 2.如何解决margin塌陷? 3.HTML5有哪些新特性? 4.常见的语义化标签有哪些?语义化标签的好处? 5.使用css和js做动画有何优劣 6.如何实现文本超出展示省略号 7.deep在css中存在吗&…

基于 Spring Boot + Vue 的墙绘产品展示交易平台设计与实现【含源码+文档】

项目简介 本系统是一个基于 Spring Boot Vue 技术栈开发的墙绘产品展示交易平台,旨在提供一个高效、便捷的在线商城平台,方便用户浏览、选购墙绘产品,并提供管理员进行商品管理、订单管理等功能。系统采用了前后端分离的架构,前…

STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件

导言 通过Keil的相关配置,可以灵活地修改输出文件的保存路径及文件名称。在Bootloader程序开发过程中,合理配置输出文件对于后续固件升级和自动化脚本处理至关重要。完成路径和文件名配置后,还可以借助Keil自带的fromelf.exe工具,…

力扣每日一题2025.5.28——题号:3372.连接两棵树后最大目标节点数目 |

目录 题目链接:3372. 连接两棵树后最大目标节点数目 I - 力扣(LeetCode) 题目描述 解法一: Java写法: C写法: 运行时间 时间复杂度和空间复杂度 总结 题目链接:3372. 连接两棵树后最大目…

华为防火墙NAPT配置

1.实验拓扑 2.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 10 20 # interface Vlanif10ip address 192.168.10.254 255.255.255.0 # interface Vlanif20ip address 192.168.20.253 255.255.255.0 # interface GigabitEthernet0/0/1port link-type accessport default vl…

java导入excel

这样读取excel时,得到的是结果值,而不是单元格的公式 import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil;InputStream inputStream file.getInputStream(); ExcelReader reader ExcelUtil.getReader(inputStream, 1); L…

stm32cube ide如何生成LL库工程

在 STM32Cube IDE 里生成使用 LL(Low Layer)库的工程,可按以下步骤操作: 1. 新建 STM32 工程 启动 STM32Cube IDE,选择File→New→STM32 Project。依据需求挑选目标 MCU 型号,接着点击Next。 2. 配置工程…

阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境

在虚拟现实和沉浸式娱乐快速发展的今天,视觉体验已经远远不够,声音的沉浸感成为打动用户的关键。然而,传统的视频配音技术往往停留在“平面”的音频层面,难以提供真正的空间感。阿里巴巴通义实验室(Qwen Lab&#xff0…

二十八、面向对象底层逻辑-SpringMVC九大组件之ViewResolver接口设计

在 Spring MVC 框架中,视图解析器(ViewResolver)是连接控制器逻辑与具体视图技术的核心纽带。它通过抽象化的接口设计,将视图的渲染逻辑与业务逻辑解耦,使开发者能够灵活支持 JSP、Thymeleaf、FreeMarker 等多种视图技…

LiveWallpaperMacOS:让你的 Mac 桌面动起来

随着桌面美化需求的不断提升,用户对于桌面壁纸的要求已经不再局限于静态图片。越来越多的 Mac 用户希望桌面能像 Windows 一样,拥有动态壁纸,展现个性、提升体验。LiveWallpaperMacOS 正是这样一款让你的 Mac 桌面焕发活力的开源项目。 本文将详细介绍 LiveWallpaperMacOS …

豆瓣电视剧数据工程实践:从爬虫到智能存储的技术演进(含完整代码)

通过网盘分享的文件:资料 链接: https://pan.baidu.com/s/1siOrGmM4n-m3jv95OCea9g?pwd4jir 提取码: 4jir 1. 引言 1.1 选题背景 在影视内容消费升级背景下,豆瓣电视剧榜单作为国内最具影响力的影视评价体系,其数据价值体现在&#xff1a…

集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006

一文了解集成均衡功能电池保护IC在大功率移动电源的应用 创芯微CM1341-DAT 创芯微CM1341-DAT是一款专用于4串锂离子/磷酸铁锂电池的保护芯片,内置有高精度电压检测电路和电流检测电路。通过检测各节电池的电压、充放电电流及温度等信息,实现电池过充电…

PHP生成pdf方法

1:第一种方法: 主要使用PHP的扩展 【 “spatie/browsershot”: “3.57”】 使用这个扩展生成PDF需要环境安装以下依赖 1.1:NPM【版本:9.2.0】 1.2:NODE【版本:v18.19.1】 1.3:puppeteer【npm in…

联通专线加持!亿林网络 24 核 32G 裸金属服务器,千兆共享带宽适配中小型企业 IT 架构

在当今数字化时代,企业的业务运营越来越依赖高效、稳定的 IT 架构。对于中小型企业而言,如何在有限的预算内构建强大且可靠的 IT 基础设施,是一项关键挑战。亿林网络推出的 24 核 32G 裸金属服务器,搭配联通专线和千兆共享带宽&am…

SQL计算列

SqlServer: ALTER TABLE KC_BILLHEAD ADD bill_no AS coalesce(billno , ) PERSISTED; 这是一个SQL语句,用于向表KC_BILLHEAD添加一个计算列bill_no。让我解释一下这个语句的各个部分: ALTER TABLE KC_BILLHEAD - 修改表KC_BILLHEAD的结构 ADD bill_n…

利用海外代理IP,做Twitter2026年全球趋势数据分析

近年来,社交媒体趋势分析逐渐成为品牌监控、市场洞察和消费者研究的必备工具。而当谈到全球趋势数据分析,很多人都会立即想到 Twitter趋势(逼近连美丽国的总统都喜欢在上面发表自己的看法- -!!!)。Twitter趋势,即Twitt…

【Vue3】Vue3 + TypeScript 中如何区分开发和生产环境的 API 地址(支持 axios 请求

Vue3 TypeScript 中如何区分开发和生产环境的 API 地址(支持 axios 请求) 在实际项目开发中,我们通常会遇到以下需求: 本地开发时访问的是本地 API(如 http://localhost:3000);上线打包后访问…

【数据结构】线性表之“双链表(带头循环双向链表)”

- 第 99 篇 - Date: 2025 - 05 - 25 Author: 郑龙浩/仟墨 【数据结构】 续上一篇: 线性表之“单链表” 文章目录 “双链表(带头双向循环链表)” 的实现:分步解释所有函数:test.cDListNode.hDListNode.c “双链表(带头双向循环链表…

【学习笔记】Transformer

学习的博客(在此致谢): 初识CV - Transformer模型详解(图解最完整版) 1 整体结构 Transformer由Encoder和Decoder组成,分别包含6个block。 Transformer的工作流程大体如下: 获取每个单词的em…