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/Shortest?Path?Test.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
繁體地址,請注明出處:http://hk.pswp.cn/news/907414.shtml
英文地址,請注明出處:http://en.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…