0

世界の特定のポイントがクワッド/プレーン上にあるかどうかをテストしたいですか? 四角形/平面は、任意の値で移動/回転/スケーリングできますが、指定されたポイントがその上にあるかどうかを検出できる必要があります。クワッドに回転/スケール/移動が適用されていない場合は、ポイントがあったはずの場所も取得する必要があります。

たとえば、サイズが 100x100 の 0, 0, 0 のクワッドを z 軸に沿って 45 度の角度で回転させたとします。世界でのマウスの位置が (x, y, 0, ) である場合、そのポイントが現在の変換でそのクワッドにあるかどうかを知る必要がありますか? はいの場合、クワッドに変換が適用されていないかどうかを知る必要があります。そのポイントはどこにあったでしょうか? コードサンプルは非常に役立ちます

4

1 に答える 1

1

レイキャスティングのアプローチは、おそらく最も単純です。

  1. gluUnProject()シーンにキャストするレイのワールド空間方向を取得するために使用します。光線の原点はカメラの位置です。
  2. 長方形の変換の逆で変換することにより、この光線をオブジェクト空間に入れます。光線の原点と方向ベクトルの両方を変換する必要があることに注意してください。
  3. 標準の光線-平面交差テストを使用して、この光線と XY 平面の間の交点を計算します。
  4. 交点の x 値と y 値が四角形の境界内にあることを確認します。そうであれば、それが目的の結果です。

GLMなどの数学ライブラリは、ここに含まれる数学の一部に自信がない場合に非常に役立ちます。これには、対応する関数glm::unProject()だけでなく、行列を反転したり、必要な他のすべての変換を実行したりする関数もあります。

于 2013-07-26T09:06:27.923 に答える