これは、three.js のビルトインraycaster
とprojector
機能を使用して実現できます。まず、このデモとそのソース コードを見てみてください。別の例を次に示します。このようにして、カメラの位置から放出される目に見えない線に近いオブジェクトを特定できます。
そうではなく、2 つのオブジェクトのどちらがカメラに近いかだけに関心がある場合は、どちらの位置値がカメラの座標からの距離が短いかを簡単に確認できます。3 次元の距離の公式が役に立ちます。
bigSphereDistance = Math.sqrt( Math.pow(camera.position.x - big.position.x,2) +
Math.pow(camera.position.y - big.position.y,2) +
Math.pow(camera.position.z - big.position.z,2) );
smallSphereDistance = Math.sqrt( Math.pow(camera.position.x - small.position.x,2) +
Math.pow(camera.position.y - small.position.y,2) +
Math.pow(camera.position.z - small.position.z,2) );
//then check...
bigSphereDistance > smallSphereDistance ? /*case*/ : /*case*/;
直観的には、小さな球体は、その距離が大きな球体の距離よりも短い場合に表示され、小さな球体の半径のバッファーがあります。
2 番目の質問に答えるために、任意のオブジェクトの 2D 座標を見つけることは、このように達成できます。