2014-04-05 39 views
0

我有一個管道系統。更精確地,我從這個代碼three.js - 獲取區域中的所有對象(網格)(3d立方體)

tube_color創建一個管 - 顯然,管的色彩,
spline_points - THREE.Vector3對象數量龐大,
radiusSegments只是數字

var material = new THREE.MeshLambertMaterial({ color: tube_color, shading: THREE.SmoothShading }); 
    var spline = new THREE.SplineCurve3(spline_points); 
    var tube = new THREE.TubeGeometry(spline, segments, 10, radiusSegments, false, false); 
    var tubeMesh = new THREE.Mesh(tube, material); 
    scene.add(tubeMesh); 

此代碼在空間中創建一個特定的網格對象。對於每個網格,我可以使用 myMesh .geometry.vertices來創建一個Vector3數組。
問題是:我有點在三維空間。圍繞這一點,我創建了Cube,其中確實與相交。例如,該多維數據集可以這樣

var cube = new THREE.CubeGeometry(xSize,ySize,zSize, 5, 5, 5); 
    var material = new THREE.MeshBasicMaterial({ 
     color: 0xff0000, 
     opacity: 1, 
     wireframe: true, 
     transparent: false 
    }); 
    var selectionMesh = new THREE.Mesh(cube, material); 
    scene.add(selectionMesh); 

創建是否有可能至少發現由立方區域具有與交叉點的對象(網格)?我知道在場景對象我有所有的網格,我可以遍歷它們,得到頂點,如果至少有一個點在立方面積,用條件迭代它們。 但我相信 ...我希望有一個方法/算法 /魔術 更簡單,然後這...

+1

如果您有很多要點,八叉樹可能會有所幫助:http://threejs.org/examples/webgl_octree.html。 – WestLangley

+0

好的,謝謝你的想法,我會在即將到來的一週檢查這個。 –

+0

@WestLangley,非常感謝!它的工作幾乎完美!對不起,延遲 - 我正在嘗試不同的方法來解決這個問題。你能幫我用八叉樹: 'meshesSearch = octree.search(rayCaster.ray.origin,radiusSphere,true,rayCaster.ray.direction);' 並且它向我展示了例如2個對象(網格) 但'intersectionCode = rayCaster.intersectOctreeObjects(meshesSearch);' 有時(我猜是隨機的)顯示1個交點,有時爲0.但是至少應該有1個交點...
我正在使用從頂點添加節點 –

回答

0

作爲@WestLangley建議解決這個問題是建立八叉樹。

octree=new THREE.Octree({ 
     undeferred:false, 
     depthMax:Infinity, 
     objectsThreshold:8, 
     overlapPct:0.15 
    }); 

,並搜索其

var meshesSearch=octree.search(rayCaster.ray.origin, radiusSphere, true, rayCaster.ray.direction); 

然而,有具體的交集,我們需要提供遞歸標誌

raycaster.intersectOctreeObjects(objects, true) 

我結束了但是這個我具體的情況更加複雜的處理足以解決那個時候的問題。