少し背景を説明します。私はC++でプロジェクトに取り組んでおり、リアルタイムのプロファイルデータに基づいてオブジェクトの3D表現を描画しようとしています。プロファイリングデータは、外部プロファイリングハードウェアから収集されます。システムはオブジェクトに沿って移動し、1秒間に300回の速度で、ソフトウェアにプロファイルスライスを提供します。各スライスは、最大8000個のXYポイントのリストで構成されます。プロファイラーの動きはエンコーダーによって記録されます。エンコーダ情報は、スキャンの3次元を提供します。
注意すべきもう1つの重要な点は、プロファイラーがオブジェクト上を前後に移動する可能性があることです。このとき、以前に読み取った/描画したスライスを(エンコーダーの位置に基づいて)新しいスライスに置き換えたいと思います。今のところ、私はエンコーダーカウントで保存するスライスの循環バッファーでこれを達成しています。これは、バッファがいっぱいになり、古いスライスの上書きを開始するときに、スライスを破棄したいことも意味します。画面に被写体の適切な量を表示するには、一度に1000スライスのプロファイルデータを描画する必要があります。今のところ、オブジェクトを点群としてレンダリングしています。将来的には、隣接するスライスを添付して、三角形のリストとしてレンダリングすることを試みる可能性があります。
私はDirectXを初めて使用しますが、書籍やオンラインの例を使用して、オブジェクトを3Dで描画するようになりましたが、頂点バッファーを効率的/適切に使用していないと確信しています。私が見つけたほとんどの例は、非常に静的なモデルで機能します。したがって、ポイントのリストを使用して単一の頂点バッファーを作成する傾向があり、その後、行列変換によって操作されます。一方、ハードウェアからプロファイルデータを取得すると、シーンが非常に迅速に更新されます。
現在、読み込んだスライスごとに新しい頂点バッファを作成しています。シーンを描画するときは、最大1000個のバッファのリストをループし、それぞれに対してDraw()を呼び出します。一度に描画される頂点バッファーの数を半分に減らすと、FPSが大幅に増加するのに対し、バッファーあたりの頂点ポイントの数を半分にするとほとんど改善が見られないことに気付きました。これは、複数の頂点バッファーであることを示しています。これにアプローチする適切な方法ではありません。
ですから、私の質問の本質は...頂点が頻繁に変化するときに、これらすべての頂点を1つの頂点バッファーに入れることができるかどうか疑問に思っています。既存の頂点バッファ内のポイントを更新できますか?または、シーンを更新するたびに1つの新しいバッファを再作成する必要がありますか?最後に覚えておくべきことは、ハードウェアからのスライスあたりのポイント数が異なることです。したがって、前のスライスを上書きする場合、新しいスライスには、置き換えられるスライスよりも多いまたは少ないポイントが含まれる可能性があります。
御時間ありがとうございます。どんなアドバイスも大歓迎です!