私はゲームの作成に非常に慣れていません(そして一般的にOpenGLで作業しています)。2Dゲームを作成しようとしていますが、衝突検出に頭を悩ませようとすると、つまずきが発生します。
たとえば、現在のマトリックスを平行移動し、回転して再度平行移動してから、点を描画するとします。そのポイントが私が描いたかもしれない他のものとの関係でどこにあるかをどうやって知ることができますか?
現在のマトリックスから「絶対」座標を計算する方法はありますか?
できるだけ簡単に説明してください!ありがとう :)
私はゲームの作成に非常に慣れていません(そして一般的にOpenGLで作業しています)。2Dゲームを作成しようとしていますが、衝突検出に頭を悩ませようとすると、つまずきが発生します。
たとえば、現在のマトリックスを平行移動し、回転して再度平行移動してから、点を描画するとします。そのポイントが私が描いたかもしれない他のものとの関係でどこにあるかをどうやって知ることができますか?
現在のマトリックスから「絶対」座標を計算する方法はありますか?
できるだけ簡単に説明してください!ありがとう :)
OpenGLはゲームエンジンではなく、レンダリングライブラリです。一方、衝突検出はゲームロジックの機能です。したがって、OpenGLとは何の関係もありません。OpenGLは、画面に視覚的な表現を表示するための表示メカニズムにすぎません。ゲームオブジェクトについては何も知らず、有用な永続データも保持しません。オブジェクトの位置をマトリックスに格納し、変換を介して移動しようとすると、最終的には、予測できない動作につながる累積浮動小数点エラーの影響を受ける可能性があります。
代わりに行うべきことは、すべてのオブジェクトの位置(および方向、速度など)を手動で維持することです。オブジェクトのすべての移動は、アプリケーションコードでユーザーが実行する必要があります。オブジェクトをレンダリングするときは、現在の値を読み取り、OpenGLに渡します。通常、レンダリングするタイプオブジェクトごとにポリゴンデータを取得し、オブジェクトインスタンスの方向で回転させ、位置で変換してからレンダリングします。フレームごとに1回繰り返します。
Model-View-Controllerパラダイムに精通している場合、ゲームオブジェクトはモデルであり、OpenGLはビューを提供します。そのため、必要に応じてモデルを操作し、必要に応じてビューをモデルから読み取る必要があります。
すべてのオブジェクトの絶対位置を追跡するのが最善です。
イライラしませんか?すべてのOpenGLおよびグラフィックプログラミングの初心者には、あなたと同じような質問があります。さまざまな参照フレームを追跡するのは難しい場合があります。
私が最初にお勧めするのは、Amazonまたは別の小売業者からOpenGLSuperBibleのコピーを入手することです。それは絶対的な始まりから始まり、そこから徐々に構築されていきます。NeHeサイトを推薦した以前のポスターも良いアドバイスをしています。
質問自体に関しては、OpenGLプログラムを作成するときに、「modelview」マトリックスをIDに設定でき(詳細についてはSuperBibleを参照)、glPoint()呼び出しで設定したすべての座標は、そのマトリックスに対して次のように定義されます。参照フレーム。これ以降、glPoint()を呼び出す以外に何もしなければ、すべてのオブジェクトは同じ絶対座標系になります。
glTranslate、glRotate、glLoadMatrixの呼び出しを開始すると、これらの関数が参照フレームを変換するため、注意が必要です。それが発生すると、後続のすべてのglPoint()呼び出しは、その新しい参照フレームに関連します。
(別のポスターで言及されているように、以前の参照フレームに戻りたい場合は、変換する前にモデルビューマトリックスをスタックに保存する必要があります。その後、スタックを「ポップ」して、以前の場所に戻ることができます。 。)
これをサポートサイトで説明するのは難しいですが、歯科医の椅子にある一連の機械式アームと考えてください。彼はトレイを動かしてあなたのあごの下に置き、それを斜めに回転させてあなたのあごをすくうことができます。それぞれの独立したモーションは、OpenGLでマトリックスとして実装された変換と考えることができます。
私が言ったように、これをオンラインで適切に説明するのは難しいです。SuperBibleの本を手に入れれば、もっと意味がわかります。幸運を!
OpenGLを学んだとき、私はすべてに次の2つのリソースを使用しました。
ゲームチュートリアルは有料でCDを販売しているようですが、よく書かれているので購入する価値があるかもしれません。
「絶対」とはどういう意味ですか?
前のポイントとの相対的なポイントが必要な場合は、今行った変換を逆にすることができます。2番目の平行移動の負の値で平行移動し、同じ軸を中心に同じ量だけ反対方向に回転してから、最初の平行移動の負の値で平行移動します。翻訳。これにより、新しい座標から古いシステムへの変換が可能になります。
または、古いポイントを新しい座標系に取り込むためにすでに必要な変換を使用することもできます。
ワールド座標でオブジェクトの位置を追跡し、それらを直接比較します。
表示を行うには、カメラモデルを使用し、すべての変換をそれに適用します。