0

OpenGL アプリケーションに 2D レイヤーが必要です。まず、次のような典型的なオルソ プロジェクションを使用して実装しました。

 Mat4 ortho =Glm.ortho(0,viewWidth , 0 ,viewHeight);

2D は正常に機能しましたが、異なる画面サイズで実行すると、2D 形状が新しいアスペクトに対して相対的にスケーリングされるという事実がありました。新しい画面サイズに応じて伸縮するには、2D 形状が必要です。

私は、オルソ行列ではなく、単なる ID を使用しようとしました。正規化されていません)範囲。したがって、すでに述べたことのために問題のあるオルソ投影に戻ることを余儀なくされています。問題は、視点をワールド座標系にとどめずに 2D オブジェクトを変換するにはどうすればよいかということです。

アップデート:

最も良い例は、Adobe AfterEffects の 2D レイヤーです。コンポジションの寸法を変更すると、2D レイヤーは新しい寸法に従ってスケーリングされません。それが私が求めているものです。

4

1 に答える 1

1

要件はある程度相互に排他的であるため、これに答える方法を知るのは難しいです。正規化された座標は必要なく、スクリーン座標を使用したい。しかし、定義上、画面座標はピクセル単位で定義され、ピクセルは通常正方形です...したがって、均一にスケーリングされているとはいえ、何らかの形式の正規化された座標が必要だと思います。

おそらく、オルソの幅と高さの比率を修正したいでしょう。これにより、ある種の疑似ピクセル単位で画面をアドレス指定できます。この場合、1 つの軸は「実際の」ピクセルですが、もう 1 つの軸は引き伸ばすことができます。したがって、高さの代わりに、4:3 ディスプレイの場合は幅の 3/4、16:9 の場合は 9/16 などを渡します。ディスプレイが「正しい」寸法の場合、これはピクセル単位になりますが、そうでない場合にのみ、1 次元でストレッチします。

比率が「最適な」比率よりも小さいか大きいかに応じて、「実際の」ピクセルの寸法を切り替える必要がある場合がありますが、ここで実際に何を撮影しているのかを知るのは難しいです。

于 2013-02-19T12:01:47.823 に答える