2

私は約 500 から 1000 個のオブジェクト (かなり小さい、最大 50 個の三角形) をアニメーション (たとえば 500 タイムステップ) またはインタラクティブに (1 つのオブジェクトを変更すると、最悪の場合は他のすべてのオブジェクトを再計算することを意味します) レンダリングしたいシミュレーション プログラムを持っています。

このようなレンダリング作業に最適なアプローチは何でしょうか?

私は VBO を考えてglBufferSubDataいて、タイムステップごとにオブジェクトを更新するために使用していました。それとも何か他の方法がありますか?

また、約 20 種類のオブジェクトがあるため、それに応じて属性を設定できるように、20 の異なる VBO を使用する必要がありますか?

4

2 に答える 2

1

キーフレーム アニメーション (フレームごとに 1 セットの頂点) を実行している場合は、それらすべてを個別の VBO としてアップロードしてバインドするものを変更するか、単一の VBO ですべてをアップロードして属性を変更します。これら 2 つのソリューションのパフォーマンスに大きな違いがあるとは思えません。

glBufferSubDataOpenGLはすべてのメモリを管理できるはずなので、私は避けます。これが非常に大きなデータ セットである場合は、必要な頂点をディスクからストリーミングして、すべてを一度にメモリに保持することを避けることができるため、この方法をお勧めしますが、データ セットが小さい場合は問題になりません。

ボーンベースのアニメーションglBufferSubDataを行う場合、CPU でスキニングを行う場合は、基本的にこのメソッドが唯一の方法です。mat3x4(GPU 上で) スキニングを行う頂点シェーダーは、フレームを均一に格納するだけで、CPU スキニングよりもはるかに優れたパフォーマンスを発揮します。

于 2012-12-25T23:17:41.937 に答える
0

このような少数のオブジェクトの場合、おそらくそれを行うための最も簡単な方法を選択し、本当に必要な場合にのみ最適化する必要があります...

そして簡単に言うと、私はあなたにとって概念的に最も簡単なことを意味します。

必要に応じて、オフセットが異なる単一のVBOオブジェクトを使用できます。複数を使用する必要はありません。

于 2012-12-25T23:09:44.073 に答える