Three-mesh-bvh shapecast函式

更新 發佈閱讀 6 分鐘

前情提要

Three-mesh-bvh套件加速搜尋原理簡介這篇文章介紹Three-mesh-bvh套件加速搜尋的原理,且該文提到判斷兩個模型是否相交的功能,只需簡單呼叫Three-mesh-bvh套件提供的函式即可實現。

利用shapecast函式參與過濾的過程

vocus|新世代的創作平台


shapecast讓我們能參與加速搜尋的過程,如果有更進階的需求,例如想找出所有相交的點,可以通過shapecast函式實作。

附上Demo鏈接:Three-mesh-bvh shapecast demo




// 一些參數、函式資訊資訊不完整,完整版可參考上方Demo鏈接

// 準備參數
const tempPoint = new THREE.Vector3();
const { frogMesh, staticMesh } = Editor;
const frogGeometry = frogMesh.geometry;
const frogIndexAttr = frogGeometry.index;
const staticGeometry = staticMesh.geometry;
const staticGeometryRelativeMatrix = staticMesh.matrix.clone().multiply(frogMesh.matrix.clone().invert());
const staticMeshRelativeBox = staticGeometry.boundingBox.clone().applyMatrix4(staticGeometryRelativeMatrix);

// 利用shapecast,找出frogMesh與staticMesh所有相交的點
const intersectPointSet = new Set();
frogGeometry.boundsTree.shapecast({
  // 持續細分有相交的包圍框
  intersectsBounds: (box) => {
    if (!box.intersectsBox(staticMeshRelativeBox)) return NOT_INTERSECTED;
    return INTERSECTED;
  },
  // 分別判斷三角形三個點是否在staticMesh內,是就收集到intersectPointSet內
  intersectsTriangle: (triangle, triIndex) => {
    if (!triangle.intersectsBox(staticMeshRelativeBox)) return false;
    if (checkIfMeshIncludePoint(staticMesh, tempPoint.copy(triangle.a).applyMatrix4(frogMesh.matrix)))
      intersectPointSet.add(frogIndexAttr.getX(triIndex * 3));
    if (checkIfMeshIncludePoint(staticMesh, tempPoint.copy(triangle.b).applyMatrix4(frogMesh.matrix)))
      intersectPointSet.add(frogIndexAttr.getX(triIndex * 3 + 1));
    if (checkIfMeshIncludePoint(staticMesh, tempPoint.copy(triangle.c).applyMatrix4(frogMesh.matrix)))
      intersectPointSet.add(frogIndexAttr.getX(triIndex * 3 + 2));
  },
});

intersectsBounds方法可以遍歷bvh逐漸細分的包圍框

  1. 回傳NOT_INTERSECTED,則不會繼續細分這個包圍框。
  2. 回傳INTERSECTED,則繼續細分該包圍框。
  3. 回傳CONTAINED,則只細分該包圍框,其他的就不管了。
    1. 如果只想簡單判斷某個點與模型是否相交,可以使用CONTAINED繼續細分這個包圍框。
    2. 如果你想收集兩個模型相交的所有三角形,這個就不適合,因為可能其他包圍框也有相交。

intersectsRange方法,在遍歷到最小包圍框後,會遍歷裡面的一組三角形

  1. 回傳true代表這組三角形符合條件,結束shapecast函式。
  2. 如果想收集三角形,可以不傳入該函式,直接到下一步intersectsTriangle遍歷所有三角形。

intersectsTriangle方法遍歷子包圍框內所有三角形

  1. 回傳true代表這個三角形符合條件,結束shapecast函式。
  2. 如果想收集三角形就回傳false,在此收集符合條件的三角形
留言
avatar-img
s_SoNg的沙龍
4會員
12內容數
s_SoNg的沙龍的其他內容
2025/04/28
在工作上遇到nodejs呼叫執行檔執行失敗問題,最後發現是由於nodejs專案本身有用nssm包成服務,在服務環境的nodejs呼叫的執行檔也執行在服務中,造成程式不會跳出視窗而導致失敗。
Thumbnail
2025/04/28
在工作上遇到nodejs呼叫執行檔執行失敗問題,最後發現是由於nodejs專案本身有用nssm包成服務,在服務環境的nodejs呼叫的執行檔也執行在服務中,造成程式不會跳出視窗而導致失敗。
Thumbnail
2025/04/08
準備專案 這邊首先準備一個新的專案,可以參考react官網,完成後參考README.md輸入npm run dev就可以啟動並在瀏覽器看到畫面 準備nssm工具 在google上搜nssm,第一個項目點進去後,找到並下載穩定版,附上下載鏈接 壓縮檔下載完畢後,解壓縮到喜歡的地方,然後進入資料
Thumbnail
2025/04/08
準備專案 這邊首先準備一個新的專案,可以參考react官網,完成後參考README.md輸入npm run dev就可以啟動並在瀏覽器看到畫面 準備nssm工具 在google上搜nssm,第一個項目點進去後,找到並下載穩定版,附上下載鏈接 壓縮檔下載完畢後,解壓縮到喜歡的地方,然後進入資料
Thumbnail
2024/10/30
如果有個算法是2秒以上很耗時的長任務,希望在執行長任務前後修改state渲染loading畫面,可能會難以達到預期效果,會看到loading畫面一閃而過。 把setState改非同步的方法...
2024/10/30
如果有個算法是2秒以上很耗時的長任務,希望在執行長任務前後修改state渲染loading畫面,可能會難以達到預期效果,會看到loading畫面一閃而過。 把setState改非同步的方法...
看更多
你可能也想看
Thumbnail
建模 (Modeling) 畫細不難,難在用最經濟的方式達成 "雖不中亦不遠矣"。 網格 (Meshing) 任憑你列式再怎麼漂亮,解不出來就是白搭。 求解 (iterating) 能收斂都好說,不能收斂就是痛苦的開始
Thumbnail
建模 (Modeling) 畫細不難,難在用最經濟的方式達成 "雖不中亦不遠矣"。 網格 (Meshing) 任憑你列式再怎麼漂亮,解不出來就是白搭。 求解 (iterating) 能收斂都好說,不能收斂就是痛苦的開始
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
[機器學習][監督式][資料分群] 支持向量機 (Support Vector Machine, SVM)
Thumbnail
[機器學習][監督式][資料分群] 支持向量機 (Support Vector Machine, SVM)
Thumbnail
上篇提到Hall Sensor的基本擺放位置,本篇就來討論其對應馬達驅動的邏輯脈絡,以及擺放角度變化的可能性。 首先得要核對馬達驅動時的變化種類,了解使用需求後,才能定位Hall Sensor所扮演的角色及功用。以目前主流的三相馬達而言,送電模式共有下述六種;這就代表Hall Sensor只要能提
Thumbnail
上篇提到Hall Sensor的基本擺放位置,本篇就來討論其對應馬達驅動的邏輯脈絡,以及擺放角度變化的可能性。 首先得要核對馬達驅動時的變化種類,了解使用需求後,才能定位Hall Sensor所扮演的角色及功用。以目前主流的三相馬達而言,送電模式共有下述六種;這就代表Hall Sensor只要能提
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
此為蔡老師提供給修課學生的參考資料的handout,為Jure Leskovec 課程的Graph Neural Network投影片的簡略解說,在此分享給有興趣的同好。這可不是完整的介紹文章,請對照原投影片使用。
Thumbnail
此為蔡老師提供給修課學生的參考資料的handout,為Jure Leskovec 課程的Graph Neural Network投影片的簡略解說,在此分享給有興趣的同好。這可不是完整的介紹文章,請對照原投影片使用。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
雜湊演算法(hash function)。或許你聽過它,但你是否了解它?劍術大師都說要人劍合一了,若是資訊人員不能人與技術合一,那要如何登峰造極?我們必須正確的使用它,才能讓它變成你的武器。 縮圖來源:https://www.pexels.com/zh-tw/photo/53207/
Thumbnail
雜湊演算法(hash function)。或許你聽過它,但你是否了解它?劍術大師都說要人劍合一了,若是資訊人員不能人與技術合一,那要如何登峰造極?我們必須正確的使用它,才能讓它變成你的武器。 縮圖來源:https://www.pexels.com/zh-tw/photo/53207/
Thumbnail
Multi-level meshing 在Icepak當中扮演的是捕捉幾何輪廓的功能,一般來說如果幾何形狀不複雜,就是些圓形和方形的原件,啟用後也沒有變化是有可能的。 因為幾何太簡單,並沒有用到Curvature function 或是 Proximity function.
Thumbnail
Multi-level meshing 在Icepak當中扮演的是捕捉幾何輪廓的功能,一般來說如果幾何形狀不複雜,就是些圓形和方形的原件,啟用後也沒有變化是有可能的。 因為幾何太簡單,並沒有用到Curvature function 或是 Proximity function.
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
這篇文章,會帶著大家複習以前學過的BFS框架, 並且以圖論的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 BFS 框架 + 演算法 虛擬碼 # Queue 通常初始化成根結點,作為起點 BFS_queue = deque([root])​ # 先
Thumbnail
本期將針對霍爾感測器(Hall Sensor)於馬達中的運作規律,進行說明及解析。係因在我們存在的物理世界當中,事物往往具有各自的脈絡與法則,若能用心體會了解之後妥善運用,皆可進一步的推動科技發展。 由上一期中,理解了霍爾感測器的安裝規則後,再將其對應到馬達旋轉狀態,可以察覺到霍爾訊號變化具備了固
Thumbnail
本期將針對霍爾感測器(Hall Sensor)於馬達中的運作規律,進行說明及解析。係因在我們存在的物理世界當中,事物往往具有各自的脈絡與法則,若能用心體會了解之後妥善運用,皆可進一步的推動科技發展。 由上一期中,理解了霍爾感測器的安裝規則後,再將其對應到馬達旋轉狀態,可以察覺到霍爾訊號變化具備了固
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News