2016-04-03 6 views
0

私はTHREE.Lineオブジェクトを持っていて、カスタムグリッドを編成しています。今私が抱えている問題は、interceptがユーザーのマウスがグリッド線の上を "直接"行く場合にのみ成功する、intersectObjectsへのレイキャストを使用するときです。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

2つの提案。 raycastersプロパティlinePrecisionをより高い値に設定する方法はありますか?ドキュメンテーションはこのプロパティをLineオブジェクトと交差するときのRaycasterの精度係数として定義しています。たぶんそれは線の間の領域を埋めることができます。 2番目の提案は、PlaneGeometryをグリッドに合わせて(同じ変換マトリックスを与えて)、スケールし、整列させ、 '.visible = false;'にすることです。飛行機が交差すると、線のグリッドも同じことが分かります。 – micnil

+0

Micnil私は、平面のジオメトリを変換する考えが好きです。あなたの意見では、より良い選択肢は何ですか? –

+0

私は線のグリッドが長方形であれば平面幾何学が良いと思うが、より「L」字形に見える。これは、おそらく2つの飛行機が必要になり、ちょっとした "ハッキー"な解決策になることを意味します。より高いlinePrecisionを最初に設定して、それがあなたのニーズに合っているかどうか確認してください。ライン精度の高い結果の1つは、グリッドがエッジの外側で少し交差することです。グリッドは、少しの高さを持つかのように交差します。私が何を意味するのか理解してほしい、そうでなければ、それを試してみてください。 – micnil

答えて

1

最も簡単な解決策は、グリッドと同じ形状のカスタムジオメトリを作成し、初期位置、回転、およびグリッドとのスケールマッチングを行うことです(まだない場合)。その後、カスタムジオメトリを子としてグリッドに追加して、対応するように移動させることができます。最後のステップは、カスタムのジオメトリメッシュをプロパティ.visible = false;を設定して非表示にすることです。

今度は、代わりにカスタムジオメトリメッシュのレイキャスターintersectsObject()を使用するだけです。交差すると、グリッドも交差することがわかります。