【Blender】【源碼詳解】BLI_mesh_boolean 實現詳解

1. 背景:

最近因為項目需要,需要閱讀 Blender 中關于 mesh boolean 的源碼;因此,對 blender 中的 mesh boolean 源碼進行解讀;
Github 上源碼下載很慢,一般使用 Gitee: gitee Blender 源碼

2. Mesh Boolean 核心源碼位置:

Blender 的 mesh boolean 的源碼,主要在工程:blenlib 這個工程中 的 BLI_mesh_boolean.h 文件中;
BoolOpType 主要包含:Intersect: 交;Union: 并; Difference: 差三種模式;

/*** Enum values after BOOLEAN_NONE need to match BMESH_ISECT_BOOLEAN_... values in* `editmesh_intersect.cc`.*/
enum class BoolOpType {None = -1,/* Aligned with #BooleanModifierOp. */Intersect = 0,Union = 1,Difference = 2,
};

3. 核心函數

核心函數:boolean_mesh 以及 boolean_trimesh 這兩個函數;boolean_trimesh 調用的是 boolean_mesh 實現,輸入參數 IMesh 需要是三角面片;

IMesh boolean_mesh(IMesh &imesh,BoolOpType op,int nshapes,FunctionRef<int(int)> shape_fn,bool use_self,bool hole_tolerant,IMesh *imesh_triangulated,IMeshArena *arena);

boolean_mesh 的文件注釋如:
對網格 pm_in 執行布爾運算運算。
布爾運算具有 \a nshapes 輸入形狀。每個網格都是輸入網格的不相交子集。shape_fn 參數在應用于輸入面參數時,表示它位于哪個形狀中(應該是從 -1 到 : 如果為 -1,則它不是任何形狀的一部分)。

use_self 參數表示函數是否應該假設相同形狀的
面相交 - 如果參數為 true,則會找到此類自交集。
有時調用者已經進行了三角剖分;
如果是這樣,則 *pm_triangulated 包含一個三角剖分:如果非 null,則它包含一個三角形網格
,每個三角形的 orig_field 表示該三角形屬于 pm 中的哪個面。
pm 參數不是因為我們可以填充它的頂點(用于調試)。pm_triangulated 參數也是如此。
輸出 #IMesh 將具有其原始字段映射回輸入網格中的
面和邊的面

4. 核心函數實現分析:

boolean_mesh 的具體實現步驟:

step 1: 如果輸入參數 imesh_triangulated 為 null, 則對 imesh 進行三角面片化

our_triangulation = triangulate_polymesh(imesh, arena);

 IMesh *tm_in = imesh_triangulated;IMesh our_triangulation;if (tm_in == nullptr) {our_triangulation = triangulate_polymesh(imesh, arena);tm_in = &our_triangulation;}
step2: 執行 boolean_trimesh 函數
IMesh tm_out = boolean_trimesh(*tm_in, op, nshapes, shape_fn, use_self, hole_tolerant, arena);
step3: 對三角面片進行后處理

布爾函數對三角形 #IMesh 進行操作,并生成一個
IMesh 作為輸出Triangle;這個函數通過刪除任何可能的三角剖分邊(可以識別,是因為它們將具有 NO_INDEX 的原始邊。并非所有三角剖分邊都可以刪除:如果它們最終真實的輸入邊,那么我們需要保留它。此外,有些是使輸出滿足所必需的“valid #BMesh(有效)”屬性:我們無法生成它們,或者具有多個不相連的邊界(例如,帶有孔的面)。

 IMesh ans = polymesh_from_trimesh_with_dissolve(tm_out, imesh, arena);

6. boolean_trimesh 原理分析:

IMesh boolean_trimesh(IMesh &tm_in,
BoolOpType op,
int nshapes,
FunctionRef<int(int)> shape_fn,
bool use_self,
bool hole_tolerant,
IMeshArena *arena);

} // namespace blender::meshintersect

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63732.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qcow2鏡像大小壓縮

本文擬對qcow2進行壓縮進行簡單介紹 背景 qcow2鏡像在使用一段時間后&#xff0c;總是會不斷膨脹變大&#xff0c;所以在導出分享時一般都需要進行壓縮以縮減占用空間。 清除空洞 qcow2方式也有稀疏的問題&#xff0c;在磁盤級別上看&#xff0c;鏡像會有大量連續的相同空洞…

達夢 本地編碼:PG_GBK, 導入文件編碼:PG_UTF8錯誤

問題 達夢 本地編碼&#xff1a;PG_GBK, 導入文件編碼&#xff1a;PG_UTF8錯誤 解決 右鍵管理服務器 查看配置 新建一個數據庫實例&#xff0c;配置跟之前的保持一致 新建一個用戶&#xff0c;跟以前的用戶名一樣 在用戶上&#xff0c;右鍵導入&#xff0c;選擇dmp的位置 導…

深度學習卷積神經網絡CNN之MobileNet模型網絡模型詳解說明(超詳細理論篇)

1.MobileNet背景 2.MobileNet V1論文 3. MobileNett改進史 4. MobileNet模型結構 5. 特點&#xff08;超詳細創新、優缺點及新知識點&#xff09; 一、MobileNet背景 隨著移動設備的普及&#xff0c;深度學習模型的應用場景逐漸擴展至移動端和嵌入式設備。然而&#xff0c;傳統…

垂起固定翼無人機大面積森林草原巡檢技術詳解

垂起固定翼無人機大面積森林草原巡檢技術是一種高效、精準的監測手段&#xff0c;以下是對該技術的詳細解析&#xff1a; 一、垂起固定翼無人機技術特點 垂起固定翼無人機結合了多旋翼和固定翼無人機的優點&#xff0c;具備垂直起降、飛行距離長、速度快、高度高等特點。這種無…

kubernates實戰

使用k8s來部署tomcat 1、創建一個部署&#xff0c;并指定鏡像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod狀態 kubectl get pods # 獲取default名稱空間下的pods kubectl get pods --all-namespaces # 獲取所有名稱空間下的pods kubect…

數據挖掘之認識數據

在數據挖掘過程中&#xff0c;數據的認識是非常重要的一步&#xff0c;它為后續的數據分析、建模、特征選擇等工作奠定基礎。以鳶尾花數據集&#xff08;Iris Dataset&#xff09;數據集之鳶尾花數據集&#xff08;Iris Dataset&#xff09;-CSDN博客為例&#xff0c;下面將介紹…

Java 優化springboot jar 內存 年輕代和老年代的比例 減少垃圾清理耗時 如調整 -XX:NewRatio

-XX:NewRatio 是 Java Virtual Machine (JVM) 的一個選項&#xff0c;用于調整 年輕代&#xff08;Young Generation&#xff09;和 老年代&#xff08;Old Generation&#xff09;之間的內存比例。 1. 含義 XX:NewRatioN 用于指定 老年代 與 年輕代 的內存比例。 N 的含義&…

統信UOS 1071 AI客戶端接入本地大模型配置手冊

文章來源&#xff1a;統信UOS 1071本地大模型配置手冊 | 統信軟件-知識分享平臺 1. OS版本確認 1.1. 版本查看 要求&#xff1a;計算機&#xff0c;屬性&#xff0c;查看版本&#xff08;1070,構建號> 101.100&#xff09; 2. UOS AI版本確認 UOS AI&#xff0c;設置&am…

定時任務——定時任務技術選型

摘要 本文深入探討了定時任務調度系統的核心問題、技術選型&#xff0c;并對Quartz、Elastic-Job、XXL-Job、Spring Task/ScheduledExecutor、Apache Airflow和Kubernetes CronJob等開源定時任務框架進行了比較分析&#xff0c;包括它們的特點、適用場景和技術棧。文章還討論了…

【ArcGIS Pro微課1000例】0064:柵格目錄、柵格數據集、鑲嵌數據集

一、柵格目錄與柵格數據集 1. 定義 柵格目錄:是一個用于管理和組織柵格數據集的結構,通常包含多個柵格數據集的元數據和索引信息。它相當于一個文件夾,里面可以存放多個柵格文件。可以將工作空間轉柵格目錄。 柵格數據集:是指單個的柵格數據文件,包含了具體的空間數據,…

Java基礎 | 數據庫的命名規范

數據庫的命名規范 1. 基本原則2. 命名規范詳解2.1 命名禁止項2.2 命名規范3. 通用字段規范4. 特殊表命名建議 1. 基本原則 統一性&#xff1a;全庫采用一致的命名規范簡潔性&#xff1a;在表達清晰的前提下盡量簡短規范性&#xff1a;遵循數據庫標準規范可讀性&#xff1a;命名…

麒麟操作系統服務架構保姆級教程(二)sersync、lsync備份和NFS持久化存儲

如果你想擁有你從未擁有過的東西&#xff0c;那么你必須去做你從未做過的事情 上篇文章我們說到rsync雖好&#xff0c;但是缺乏實時性&#xff0c;在實際應用中&#xff0c;咱們可以將rsync寫進腳本&#xff0c;然后寫進定時任務去備份&#xff0c;如果每天凌晨1&#xff1a;00…

青少年編程與數學 02-004 Go語言Web編程 16課題、并發編程

青少年編程與數學 02-004 Go語言Web編程 16課題、并發編程 一、并發編程并發編程的關鍵概念包括&#xff1a; 二、并發與并行并發編程&#xff08;Concurrency&#xff09;并行計算&#xff08;Parallelism&#xff09;區別 三、Go語言并發編程1. 協程&#xff08;Goroutine&am…

均值聚類算法

K-均值聚類算法是一種常用的無監督學習算法&#xff0c;用于將數據集劃分為K個簇或聚類。它的基本思想是通過迭代將數據點分配到簇中&#xff0c;使得每個數據點都屬于最近的簇中心&#xff0c;并且使得簇內的數據點之間的距離最小化。 算法步驟如下&#xff1a; 1. 初始化K個…

wtforms+flask_sqlalchemy在flask-admin視圖下實現日期的修改與更新

背景&#xff1a; 在flask-admin 的modelview視圖下實現自定義視圖的表單修改/編輯是件不太那么容易的事情&#xff0c;特別是想不自定義前端view的情況下。 材料&#xff1a; wtformsflask_sqlalchemy 制作&#xff1a; 上代碼 1、模型代碼 from .exts import db from …

【AIGC-ChatGPT進階副業提示詞】末日生存指南 2.0:瘋狂科學家的荒誕智慧

引言 在這個不斷變化的世界中&#xff0c;末日似乎總是lurking在角落。但是&#xff0c;親愛的幸存者們&#xff0c;不要害怕&#xff01;因為我&#xff0c;瘋狂科學家2099&#xff0c;正在這里為你們帶來最新版本的末日生存指南。這不是你祖母的應急手冊&#xff0c;而是一本…

BiLSTM:深度學習中的雙向長短期記憶網絡

目錄 ?編輯 1. BiLSTM原理 2. BiLSTM的應用案例 3. BiLSTM研究進展 4. BiLSTM技術挑戰 5. BiLSTM未來趨勢 6. BiLSTM的實際應用示例 6.1 數據準備 6.2 構建BiLSTM模型 6.3 訓練模型 6.4 評估模型 6.5 可視化訓練過程 7. 結論 在深度學習的浪潮中&#xff0c;BiLS…

Socket 收發內部拆包封包函數

在socket通信的時候&#xff0c;有時候數據比較大&#xff0c;內部緩存會溢出&#xff0c;導致發送或接收數據不正確。 針對這個情況&#xff0c;封裝了一個接收和發送的底層函數&#xff0c;根據緩存大小批次發送和接收&#xff0c;內部有自己的緩沖區&#xff0c;測試情況良…

RK3588 , mpp硬編碼yuv, 保存MP4視頻文件.

RK3588 , mpp硬編碼yuv, 保存MP4視頻文件. ?? 傳送 ?? Ubuntu x64 架構, 交叉編譯aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解碼轉RGBRk3588 FFmpeg 拉流 RTSP, 硬解碼轉RGBRK3588 , mpp硬編碼yuv, 保存MP4視頻文件.

powershell美化

powershell美化 寫在前面 除了安裝命令&#xff0c;其他都是測試命令&#xff0c;后續再寫進配置文件 安裝主題控件 安裝主題oh-my-posh&#xff0c;powershell中執行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…