2016-04-03 23 views
0

我有一個THREE.Line對象,用於編排自定義網格。現在我遇到的問題是當用戶鼠標移過這個網格時使用光線播送到intersectObjectsintercept只有當用戶鼠標直接「穿過任何網格線」時纔會成功。IntersectObjects - THREE.Line - Three.js

請參閱所附照片: Custom Grid

所以最終什麼,我正在試圖做到的是,如何能在字裏行間的空間填充具有「隱形」的臉,甚至形狀,這樣當用戶鼠標移過這個網格,我可以觸發一個動作。這裏是目前我在做什麼:

var response = this.buildGridGeometry(modelStep,modelSize,gridtype); 
var geometry = response['geometry']; 
geometry.computeBoundingBox(); 
// # Setup the material 
var material = new THREE.LineBasicMaterial({ color: 0x000000, opacity: 0.2 }); 
// # Draw each individual line 
var line = new THREE.Line(geometry, material, THREE.LinePieces); 

有什麼建議嗎?

+0

兩個建議。如何將raycasters屬性linePrecision設置爲更高的值。該文檔將此屬性定義爲_ raycaster在相交Line對象時的精度因子._。也許它可以填充線條之間的區域。第二個建議是將PlaneGeometry與網格進行縮放並對齊(給它一個相同的變換矩陣),然後使它成爲'.visible = false;'。當飛機相交時,你知道線條也是如此。 – micnil

+0

Micnil我喜歡改變平面幾何的想法。在你看來,最好的選擇是什麼? –

+0

如果你的網格線是矩形的,我想平面幾何體會更好,但它看起來更「L」形。這意味着你可能需要兩架飛機,使其成爲一個「哈克」解決方案。首先嚐試設置更高的linePrecision,看看是否適合您的需求。高線條精度的一個後果可能是網格會在邊緣外相交。網格也會相交,就好像它有一點高度一樣。希望你明白我的意思,否則,試試吧。 – micnil

回答

1

最簡單的解決方案是創建一個與網格形狀相同的自定義幾何體,然後使其與網格的初始位置,旋轉和比例匹配(如果它尚未)。之後,您可以將自定義幾何作爲子項添加到網格,以便相應地移動。最後一步是通過設置其屬性.visible = false;使自定義幾何網格不可見。

現在你只需要在自定義幾何網格上使用raycasters intersectsObject()來代替它,並且當它確實相交時,就知道網格也是相交的。