私はAndroidゲームアプリを作成しており、openGLを使用して3Dobjモデルをアプリにロードしています。これらのオブジェクトをインタラクティブにする方法について誰かが私を助けてくれるかどうか知りたいです。私が本当に必要としているのは、オブジェクトをクリック可能にすることだけですが、画面上でオブジェクトをドラッグするなど、もっと学ぶのはクールでしょう。
助けてくれてありがとう。
あなたが欲しいものはピッキングと呼ばれます。
これは簡単な作業ではありません。正確に実行したい場合は、複数のオプションがあります。
問題: 2D 座標 (マウス/タッチ位置) に基づいて 3D 空間でオブジェクトを選択したい。2D マウス座標が原因で、3D 空間での正確なクリック位置を決定するための 1 つの座標が失われます。
1 つの可能なオプションは次のとおりです。
このアプローチはそれほど柔軟ではありませんが、実装は他のソリューションに比べて非常に簡単です。使用者が特定のオブジェクトをクリック/タッチしたかどうかしか検出できず、オブジェクトの正確な位置を特定できないため、制限があります。
別の可能なオプションは、2D クリック位置に基づいて 3D ワールドで光線を計算し、次にこの光線と衝突する 3D 空間内のすべてのオブジェクトを決定することです。これはレイピッキングと呼ばれます。レイ ピッキングの OpenGl チュートリアルはこちら
この例ではglRenderMode, glLoadName, etc.
、固定関数パイプラインを使用していない場合 (たとえば、カスタム シェーダーを使用している場合など)、これが最適な選択ではない可能性があります。
別のオプションは、クリック位置、ビューポート、および投影行列に基づいて、計算を行い、光線ベクトルを自分で計算することです。これを行いたい場合は、gluUnprojectのドキュメントが役に立ちます。