私はVertex Buffer Objectの使い方を理解しており、即時モードの描画よりも大幅にパフォーマンスが向上しています。私は2Dのクワッド(スプライト)をたくさん描画します。私はそれぞれのVBOを作成するか、すべてのデータを保持する1つのVBOを作成する必要があるかどうかを知りたいですか?いくつのVBOを使用しますか?
答えて
各スプライト/クワッドに新しいVBOを使用しないでください。したがって、それらをすべて単一のVBOに入れると、あなたの場合にはより良いソリューションになります。
しかし、一般的に私はこれが1つの文で答えることはできないと思います。
各Quadに新しいVBOを作成しても、実際のパフォーマンスが向上するわけではありません。そうすると、glBindBuffer
のVBOの切り替えが必要になり、多くの時間が無駄になります。しかし、あまりにも多くのデータを保持するVBOを作成すると、他の問題に遭遇する可能性があります。
小VBOs:
- は、多くの場合、あなたのプログラムコードで扱いやすいです。レンダリングする各オブジェクトに新しいVBOを使用できます。この方法で、あなたのオブジェクトを非常に簡単にあなたの世界で管理することができます
- VBOが小さすぎる(わずかな数の三角形)場合、大きな利益を得られません。
- あなたは最高のパフォーマンスのための単一の
drawArrays()
呼び出しでオブジェクトのトンをレンダリングすることができます多くの時間は、バッファ
大VBOs間のバッファを切り替える(そしておそらくシェーダ/テクスチャを切り替え)で失われます。
- あなたは最高のパフォーマンスのための単一の
- 1つのVBOで多くのオブジェクトを管理するオーバーヘッドを作成する可能性があります(これらのオブジェクトの1つを移動して別のオブジェクトを回転させたい場合はどうすればよいでしょうか?)。
- あなたVBOsは、彼らがVRAM
に移動することができないこと、その可能性は大きすぎる場合は、以下のリンクはあなたを助けることができます。
ジオメトリのすべてまたはほとんどを保持するために、1つ(または少数の)のVBOを使用します。
一般的に、シーンをレンダリングするのに必要なAPI呼び出しが少なくなるほど良い結果が得られます。
それはまた、あなたがしたいdは何によって決まりますそれらのスプライトでやる?
動的ですか?あなたはクワッドの中心だけを変更したいのか、あるいは四つのポイントをすべて変更したいのですか?
これは重要です。これは、データが動的な場合、最も簡単な方法で、各フレームからCPUからGPUに転送する必要があるためです。たとえば、ジオメトリシェーダを使用するなど、GPUですべての計算を実行できますか?
非常に単純なクワッド/スプライトについても、GL_POINT_SPRITEを使用できます。これを使用すると、クワッド全体に対して1つの頂点のみを送信する必要があります。しかし、欠点は、それを回転させることが難しいことです...
- 1. glDrawElements VBOを使用したEXC_BAD_ACCESS
- 2. OpenGL - 複数のVBOを使用して描画をスローダウンしますか?
- 3. LWJGLのテクスチャを持つVBO
- 4. VBOでGLOS20.glVertexAttribPointer()をAndroidで正しく使用するにはどうすればよいですか?
- 5. std :: uniform_real_distributionはいくつの乱数を使用しますか?
- 6. curl_multi_execはいくつのスレッドを使用しますか?
- 7. VBOの使い方を理解するのが難しい
- 8. IndexedDBを使用していくつのオブジェクト(列)を使用できますか?
- 9. VBOを正しく使うことを学ぶ
- 10. Android OpenGL ES2 1つのVBOのための多くのテクスチャ
- 11. iOS用のGLKitでVBOを使用するには?
- 12. CUDAを使用したOpenGLの高さマップペイントVBO
- 13. 頂点バッファオブジェクト(VBO)を使用したKinectポイントクラウドのレンダリング
- 14. perlスクリプトを使用すると、いくつかの副スクリプトの1つを使用します。
- 15. VBOでテクスチャバインディングが正しく動作しない
- 16. 可動部分を持つモデル用のVAO/VBOのOpenGL構造?
- 17. OpenGlはVBOを使用して三角形を表示しません
- 18. findを使用していくつかのファイルを削除します
- 19. いつAppDomainを使用しますか?
- 20. QueueUserAPC()をいつ使用しますか?
- 21. appendをいつ使用しますか?
- 22. いつNSURLProtocolを使用しますか?
- 23. いつattr_writerを使用しますか?
- 24. ko.utils.unwrapObservableをいつ使用しますか?
- 25. reinterpret_castをいつ使用しますか?
- 26. JoranConfiguratorをいつ使用しますか?
- 27. Page.IsValidをいつ使用しますか?
- 28. socket.ioをいつ使用しますか?
- 29. EntityManager.clear()をいつ使用しますか?
- 30. いつコードブロックを使用しますか?