5

OpenGLパースペクティブビューについて理解するのに苦労しています。私はたくさんの情報を読みましたが、それは私が求めていることを達成しようとするのに役立ちませんでした。これは、私の3DシーンがすべてのAndroidデバイスの画面全体に表示されていることを確認しています。

これをテストするために、3D空間にクワッドを描画します。これは、最終的にはすべてのコーナーに接触し、デバイスの画面全体に表示されます。次に、このクワッド、または実際にはその座標を使用して、特定のZ距離にあるバウンディングボックスを指定します。これを使用して、ジオメトリを配置し、それらが画面全体に表示されるようにします。画面のサイズが変更されたとき、または別の画面解像度で実行する場合は、このバウンディングボックスとジオメトリを再計算します。静的ジオメトリについては話していませんが、たとえば、画面をボールで埋めたい場合、ボールの大きさや数は関係ありません。重要なのは、画面が塗りつぶされ、冗長性がないことだけです。目に見える錐台の外側のボール。

ここに画像の説明を入力してください

  • ビューポートを指定するときに私が理解している限り、実際にはピクセル値を錐台の境界にバインドします。ウィンドウのピクセルが3Dジオメトリの位置と一致するように正投影ビューを実際に設定できることは知っていますが、これがパースビューでどのように機能するかはわかりません。
  • ここでは、ビューポートの幅と高さがnearZにマッピングされると想定しています。したがって、ボールがZ = 1fにある場合、元のサイズになります。
  • ボールを画面内にfarZの方向に移動すると、遠近法が機能するようにボールが縮小されます。したがって、たとえばZ = 51fのボールは画面上で小さく表示され、画面全体を埋めるにはより多くのボールが必要になります。
  • 今そうするために、私は紫色の境界を探しています
  • 実際には、さまざまな錐台サイズ(幅x高さ)で画面全体を埋めるためにこれらの境界が必要ですが、ボールの錐台角度とZ距離は常に同じです。
  • これらの紫色の境界を計算するためにtrigを使用できると思います(青い三角形の注を参照)
  • 錐台の頂角である錐台の角度を正しくマークしていますか?
  • 私がそれについて何かを読んだように見えるので、誰かが緑の1fと-1fの値について詳しく説明できますか?錐台内のジオメトリのサイズを変更するために使用されるスカラーのように見えますか?

私は実際に、任意のAndroidデバイスの任意の解像度/ウィンドウで3D空間内のビューポート境界に対してジオメトリをプログラムで配置できるようにしたいと考えています。

注:私は、任意の解像度で既知の幅x高さのステージ(視覚野)を使用するフラッシュ背景を持っています。これにより、絶対測定またはパーセント測定のいずれかを使用してアセットを簡単に配置/スケーリングできます。このシステムがOpenGLのパースペクティブビューにどのように適用されるかを理解しようとしていると思います。

4

1 に答える 1

2

gluUnprojectを使用したこの投稿が質問に答えると思います。

于 2011-09-26T17:59:37.997 に答える