2

私はアンドロイドでの作業を開始したので、小さなゲームを開発しています (主に学習目的)。私のゲームには単純な 2D 非スクロール マップがあり、マップに配置される多くのオブジェクトがあります。オブジェクトはクラスで既に静的にモデル化されており、これらをフロート バッファーにシフトしてシェーダーに送信する方法を理解しています。

モデル、ビュー、プロジェクト マトリックスの要点は理解していますが、シェーダーで変換したり、オブジェクトごとに特定のモデル マトリックスを渡したりするのは効率が悪いと聞きました。

モデル化されたオブジェクトを最適に取得し、マップ上の適切な場所 (世界座標) に配置するにはどうすればよいですか? その変換はどこで発生する必要がありますか (シェーダーの前または最中に? モデル マトリックスの一部として?)

(必要に応じて、疑似コードで十分です。)

ありがとうございました!

4

1 に答える 1

1

それはすべて、(モデルの) 頂点の数が 1 回の移動 (変換の変更) になる比率に帰着します。一般的なルールとして、ジオメトリの大部分をレンダリングする場合、パイプラインを最大限に活用したい場合は、特定のユニフォームに対して少なくとも約 100 個の頂点を送信する必要があります。頂点の総数が 10000 未満の比較的小さい場合、最新のシステムでパフォーマンスの低下に気付かない可能性があることに注意してください。

そのため、オブジェクトが自明ではない場合、つまり多数の頂点がある場合は、ユニフォームを変更することをお勧めします。オブジェクトが単純な場合は、それらを共有の頂点配列に配置し、追加の頂点属性を変換の均一な配列にインデックス付けすることで、パイプラインをより有効に活用できます。

オブジェクトの複雑さに大きく依存します。

于 2012-11-22T01:28:44.543 に答える