2

OpenGL ES 2.0 は初めてで、2D レンダリングを試しています。

各オブジェクトが平行移動、回転、傾斜、スケーリングされ、マウス クリックで選択できると仮定すると、次の 2 つの選択肢があります。

  • 各変換のマトリックスを格納し、それらを個別に頂点シェーダーに渡します。行列の乗算は GPU で実行されるため、より高速になると思います。変換行列の 1 つだけを変更する場合にも便利です。各行列をベクトルに適用する必要があるため、選択を決定するのはやや困難です。

  • すべての変換行列の積として 1 つの行列のみを格納し、頂点シェーダーに渡します。Matrix.scaleM()やなどの一部のメソッドMatrix.translateM()は高速で乗算を必要としないため、これは良いことかもしれません。また、フレームごとにシェーダーにアップロードする均一なデータが削減されるためです。ただし、変換行列の 1 つが変更されるたびに、積全体を再計算する必要があります。1 つの行列をベクトルに適用するだけでよいので、選択の決定は比較的簡単です。

    選択に関する提案は大歓迎です。

  • 4

    1 に答える 1

    2

    パフォーマンスは複数の懸念事項に関連しているため、ベンチマークを実行した方がよいでしょう。

  • CPUとGPUの乗算性能の差。
  • ユニフォームの帯域幅をアップロードします。
  • 変換で適用される頂点の数。
  • 変換行列の 1 つだけをダーティとしてマークする可能性。
  • 変換パラメータを変更する頻度。

    行列の乗算は、2D オブジェクトのみに関連する場合に簡単に最適化できるため、ローカルでこれを実行しても通常は問題ありません。

  • 于 2012-04-22T12:08:10.803 に答える