0

プログラム可能なパイプライン(OpenGL 4)を使用しています。問題は次のとおりです。クリップ空間座標[-1、1]の範囲で定義された4つの頂点を持つ「平面」と呼ばれるデフォルトのプリミティブがあります。平面をスケーリングするためにそれらを直接移動することはありませんが、代わりにモデル行列にスケールを適用します。たとえば、幅= 100、高さ= 50の平面を取得するには、平面をスケーリングします。

_modelMatrix.scale(100/2,50/2,1);

また、平面の中心を定義し、ローカルの中心をオフセットするために移動できるアンカーポイントがあります。問題:ピボットを移動した後に平面のスケーリングを開始するまではすべて正常に機能します。たとえば、平面の幅=100および高さ=100の場合、平面の左上隅になるように中心をオフセットします。モデル行列を現在の位置に変換し、xとyのオフセット値(50と-50)を追加します。中心は問題なく配置されますが、平面を再度スケーリングすると、ピボットの中心は新しいスケールですが、オブジェクトに合わせてスケーリングされないためシフトします定義されたアンカーが新しいスケールに対して調整されるようにする正しい方法は何ですか?固定パイプラインでは、アンカーオフセットを追加することで簡単に解決できることを知っていますAPI呼び出しを介して頂点を定義するときに、頂点に直接、

4

1 に答える 1

3

これは、標準的な変換順序の問題です。解決策は、正しい順序で変換を適用することです。スケーリングしてからオフセットする場合は、そのようにします。オフセットしてから新しいオフセットを基準にしてスケーリングする場合は、そのようにします。どちらも「正しい」ものではありません。それはすべてあなたが望むものに依存します。

あなたの場合、翻訳の前に、最初にスケールを適用する必要があります。列メジャー行列を正しく乗算していると仮定すると、最後にスケールを指定することを意味します。

于 2012-10-25T17:08:22.867 に答える