2

オブジェクトをドラッグできるようにしたいのですが、別のオブジェクトの表面に「スナップ」させたいです。マウスを放したときに「スナップ」するだけか、ライブで更新するかは気にしません。

最終的な目標: Blender で滑らかな形状を作成し、それをインポートして、その形状にスナップ ドラッグできるようにします。プロシージャルに生成されたサーフェスでこれを行うことができることは知っていますが、プロシージャルに生成されていないサーフェスを使用したいと考えています..または少なくとも、使用したいサーフェスを使用する方法がわかりませんまだ手続き的に生成します。

http://stemkoski.github.io/Three.js/Mouse-Click.htmlの例を試し 、「クリック」効果を「ドラッグ」効果に変更しました。次に、この例に組み込みました: http://mrdoob.github.io/three.js/examples/webgl_interactive_draggablecubes.html

効果は機能しており、球体全体で立方体をドラッグすると、面がハイライトされます。

次に、ドラッグしたオブジェクトを取り、この欠陥のあるロジックを使用して球の面にスナップしようとしました。

SELECTED.position.x = intersectsRay[ 0 ].face.normal.x;
SELECTED.position.y = intersectsRay[ 0 ].face.normal.y;
SELECTED.position.z = intersectsRay[ 0 ].face.normal.z;

問題: ドラッグされたオブジェクトは常に球の中心にスナップします...

その理由は、(私が思うに..) この場合、面の「法線」が (球) の中心だからです。

FACEのx、y、zを見つける方法(形状に関係なく)、またはこの概念を実装する他の方法を知っている人はいますか?

4

1 に答える 1

3

簡単な解決策は、ローカル (および正規化された) 面の法線を使用しないことです。たとえば、頂点インデックスを使用できます。

何かのようなもの:

intersectedOBJ.geometry.vertices[intersect.face.a]

このようにして、ドラッグしたオブジェクトを面の頂点の 1 つにスナップします。

また、顔の「重心」を使用するか、自分で顔の中心を計算することもできます。

于 2013-09-08T18:13:34.760 に答える