頂点変換のために GPU パイプライン内で行列を構築したい場合、現在の実装は非常に非効率的であることに気付きました。これは、頂点ごとにソース マテリアルから行列を再構築するためです (実際には、影響を受ける頂点ごとに 1 回だけ構築する必要があります)。 )。1 回の描画呼び出しで描画される頂点の配列全体を変更する方法はありますか? 複数の頂点が同時に処理され、それらを効率的に同期できるとは思えないため、行列を計算して vram に保存することはあまり良い選択肢ではないようです。私が考えることができる唯一の他のオプションは計算シェーダーです。私はまだその使用法を調べていませんが、後で描画するときにそれらにアクセスできるように、行列を計算して GPU に保存することは可能でしょうか?
質問する
126 次
2 に答える
0
これを実現する 1 つの方法は、マトリックスを事前に計算し、均一な変数としてシェーダーに送信することです。たとえば、シェーダーが MVP マトリックスに頂点位置を乗算するだけでよい場合は、シェーダーの外部で MVP マトリックスを事前に計算し、それを float4x4 ユニフォームとしてシェーダーに送信できます。その単一の行列を各頂点で乗算します。頂点は GPU 上で並列に処理され、GPU にはベクトル計算用に最適化された命令セットがあるため、それ以上の最適化はありません。
于 2012-04-29T19:27:24.720 に答える
0
ソースコードはありますか?シェーダーで行列を計算することはありません。通常は CPU で計算し、定数バッファーで渡します。
于 2012-04-29T19:19:47.487 に答える