私は Android で OpenGL ES 2.0 を使用しており、次のようにディスプレイを初期化しています。
float ratio = (float) width / height;
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7); //Using Orthographic as developing 2d
私が理解に苦しんでいるのはこれです:
私のアプリが「固定画面」ゲームであるとしましょう(パックマンのように、スクロールせず、ゲーム全体が画面に表示されるだけです)。
現時点では、x と y の両方で -1 から +1 にクワッドを描画すると、次のようになります。
明らかに、これは上記のように -ratio, ratio を設定しているためです。したがって、これは正しいです。
しかし、これを「全体」画面として使用することになっていますか? 左右にかなり大きなレターボックスがありますか?
物理ディスプレイの全高 (および可能な限り幅) である長方形のディスプレイが必要ですが、これは -1 未満で +1 を超える描画を意味します。これは問題ですか?
これがスクロール ゲームの場合、クリッピングを使用するオプションがあることは理解していますが、この特定のシナリオでは、画面上の「ゲーム ボード」全体を静的にしたい (そして、利用可能な画面領域をできるだけ多く使用するために) 「ストレッチ」せずに、スプライトの伸びを引き起こします)。
画面の上部として 0,0 を使用するのが好きなので、基本的には次のように draw メソッドを渡します。
quad1.drawQuad (10,0);
drawQuad メソッドがこれを取得すると、基本的には、openGL で表現されているように左から右に範囲を取り、画面の幅を分割します (つまり、私の場合は -1.7 から +1.7 で、3.4/2560 = 0.001328125)。そして、(上記のように) X として 10 を指定すると、次のようになります。
-1.7 + (10*0.001328125) = -1.68671875
次に、クワッドを -1.68671875 にプロットします。
これを行うと、通常の座標で作業できます (y 軸を加算するのではなく減算するだけなので、上部に 0 を設定できます)。
これは物事を行う良い方法ですか?
この方法では、現時点で 100,100 の正方形を指定すると、正方形ではなく、長方形になるためです。ただし、プラス面として、クワッドを幅 x 高さでスケーリングすることにより、物理画面全体を埋めることができます。