私はopenglの研究を始めており、3Dチェスのようなものを作ろうとしていますが、適切なアニメーションを作成するために「テーブル」のどこをクリックしたかを知る方法がわかりません。何かアドバイスはありますか?
2 に答える
waldecir、raypick 関数を探します。これは、シーンのカメラの中心から、クリックしたピクセルを介して (実際には、3D ワールドの「画面のガラス面」を表すカメラの平面上のそのピクセルの変換された位置を介して) 光線を送信し、最前面のポリゴンを返すための名前です。光線がいくつかの情報とともにヒットします。通常、UV 座標やテクスチャ座標など、ポリゴンの表面軸内の座標です。座標を確認することで、ユーザーがクリックした四角形を特定できます。
レイは任意の位置から任意の方向に送信できるため、カメラの位置とその平面の中心を取得する必要がある可能性がありますが、ドキュメントが役立つはずです。
これを「3Dピッキング」と呼びます。画面座標を世界座標に変換する必要があります。そこから、光線/衝突オブジェクト (バウンディング ボックス?) の交差テストを行います。それらが交差する場合、それがユーザーがクリックした場所です。
深さ順の問題を解決するには、各オブジェクトの交差までの最初の時間を見つけてから、(正の) 時間の最も短いものを選択するなど、これよりも少し多くのことを行う必要があります。
「3D ピッキング」でググると、探しているものが見つかるかもしれません。
ここにチュートリアルがあります: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=32
これは、バウンディング ボックス、ポリゴン、カーブなど、バウンディング オブジェクトの形状に固有のものではないことに注意してください。サポートするオブジェクトのタイプごとに、交差テストの計算を計算する必要があります。
編集:
リンクする前にそのチュートリアルを読んでいませんでした.NEHEはすべてのクールな子供たちがOpenGLを学ぶ場所だと思っただけです(確かに10年前...)。
ピッキングに関する OpenGL FAQ の一部を次に示します。