2

私は three.js と WebGL の初心者です。

私のアプリケーションには、2 つのオブジェクトがある 3D シーンがあります。

  1. オブジェクト - 大きな球です。
  2. object - 最初のオブジェクトの表面にある小さな球。

大きな球体はその軸を中心に回転します。また、球の周りでカメラを回転させることもできます。

大きな球の表面にある小さな球のように、球も一緒に回転します。大きな球がカメラの方を向いているときは小さな球が見えますが、大きな球がその前にあるときは見えません。

問題は、小さな球体がカメラに見えるときと見えないときをどのように判断するかです。

また、表示されている小さな球体の座標を 2 次元で取得する必要があります。これどうやってするの?

4

1 に答える 1

1

これは、three.js のビルトインraycasterprojector機能を使用して実現できます。まず、このデモとそのソース コードを見てみてください。別の例を次に示します。このようにして、カメラの位置から放出される目に見えない線に近いオブジェクトを特定できます。

そうではなく、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 座標を見つけることは、このように達成できます。

于 2013-10-03T18:09:05.940 に答える