固定シェーダー パイプラインまたはプログラム可能なシェーダー パイプラインのどちらを使用する場合でも、一般的な頂点パイプラインは、次の行列乗算 (カスタム コードまたはバックグラウンド) で構成されます。
Projection * Modelview * Position
Modelview
多くのチュートリアルでは、オブジェクトの回転などの項目をマトリックスに入れる必要があることに注意しています。
度に基づいて標準の回転行列関数を作成し、角度パラメーターに適切な 90 の倍数を追加して、画面の自動回転方向を考慮しました。動作します。
さまざまな画面サイズ (画面のさまざまなピクセル幅と高さ) の場合、マトリックスにこれらの多くを組み込むScale
ことができるように、そこに乗数を考慮することもできます。Modelview
しかし、私が落ち着いたのは、はるかに冗長な行列計算です。私はこのようなことに慣れていないので、これが賢明かどうかについてフィードバックをいただければ幸いです。
スケールや回転などのオブジェクト操作に加えて、画面サイズのスケーリングと画面の向きに独立したマトリックスを追加するだけです。私はこれで終わります:
Projection * ScreenRotation * ScreenScale * Translate * Rotate * Scale * Position
これらのいくつかは、交換可能な順序であり、交換Rotate
可能Scale
であることがわかりました。
これにより、より微調整された制御とコードの分離が可能になるため、たとえば、画面の向きを同時に考えることなく、オブジェクトの回転だけに集中できます。
これは、行列計算を適切に整理するための一般的または許容可能な戦略ですか? うまく機能しているように見えますが、そのような冗長性には落とし穴がありますか?